using namespace std;
int n,ans=0;
string a[25];
string dragon;
int g[25][25],use[25];//use数组记录使用单词数
void dfs(string th,int k)
{
	ans=max(ans,(int)th.size());//ans记录连接后龙的长度
    /*if(ans>(int)dragon.size())//如果ans大于龙的长度,那么龙就等于传进来th,即新长龙
		dragon=th;*/
	for(int i=0;i<n;i++)//循环寻找下一个可连接单词
	{
		if(g[k][i]&&use[i]<2)//g数组不为0,表明可连接
		{
			use[i]++;
			dfs(th+a[i].substr(g[k][i]),i);//接龙,进行不重复连接;
			use[i]--;
		}
	}
}
int main()
{
	cin>>n;
	char per;
	for(int i=0;i<n;i++)	cin>>a[i];
	cin>>per;
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<n;j++)
		{
			for(int k=1;k<min(a[i].size(),a[j].size());k++)//处理包含关系
			if(a[i].substr(a[i].size()-k)==a[j].substr(0,k))//判断重复首尾
			{
				g[i][j]=k;//记录重复首尾字符数
				break;//记录就退出,保证记录最小重复数
			}
		} 
	}
	for(int i=0;i<n;i++)
	{
		if(per==a[i][0])//查找第一个单词,可能以per为首字符的单词有多个
		{
			use[i]++;//记录使用次数
			//dragon=a[i][0];//初始龙
			dfs(a[i],i);//进行深搜,寻找下一个可连接单词
			use[i]--; //回溯
		} 
	}
	cout<<ans<<endl;
	//cout<<dragon;输出最长龙
}