#include<iostream>
#include<string.h>
using namespace std;
int maxn;//最大值
int n;//可用的单词数量
int sum[21];//单词使用次数
int lian[21][21];//单词连接部分长度
string a[21];//每个单词
char begin;//开头字母
int choose1(int q,int p){//算出字符连接部分长度
int z=0;
bool w=false;
for(int i=0;i<a[q].size();i++){
if(a[q][i]==a[p][0]){
for(int i0=i,i1=0;i0<a[q].size(),i1<a[p].size();i0++,i1++){
if(a[q][i0]==a[p][i1]){
z++;
w=true;
}else{
w=false;
z=0;
break;
}
}
if(w) break;
}
}
if(z>=a[p].size()) return 0;//如果被包住则输出0
else return z;
}
void choose2(int q,int z){//寻找最长
bool w=false;
z=z+a[q].size();
for(int i=1;i<=n;i++){
if(lian[q][i]!=0&&sum[i]<2){
w=true;
sum[i]++;
z=z-lian[q][i];
choose2(i,z);
z=z+lian[q][i];
sum[i]--;
}
}
if(!w){
if(z>maxn) maxn=z;
}
return;
}
int main(){
cin>>n;//输入
for(int i=1;i<=n;i++){
cin>>a[i];
}
cin>>begin;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
lian[i][j]=choose1(i,j);
}
}
for(int i=1;i<=n;i++){
if(a[i][0]==begin){
sum[i]++;
choose2(i,0);
sum[i]--;
}
}
cout<<maxn;//输出
return 0;
}