#include<bits/stdc++.h>
using namespace std;
inline int read()
{
register int x=0;
register char ch=getchar();
while(ch>'9'||ch<'0')ch=getchar();
while(ch>='0'&&ch<='9')
x=(x<<1)+(x<<3)+ch-'0',ch=getchar();
return x;
}
inline void write(int x)
{
if(x>=10)write(x/10);
putchar(x%10+'0');
}
struct p
{
int next,to,bad;
}
edge[484];
int n;
char s[21][110086];
int bd;
int head[484],cnt=1;
int flag[21];
int len[21];
int ans;
char c;
inline void add(int from,int to,int bad)
{
edge[cnt].bad=bad;
edge[cnt].to=to;
edge[cnt].next=head[from];
head[from]=cnt++;
}
inline bool check(int x,int y)
{
int minlen=min(len[x],len[y]);
int nflag=0;
bd=1;
for(int i=1;i<minlen;i++)
{
nflag=1;
for(int j=1;j<=i;j++)
{
if(s[x][len[x]-i+j]!=s[y][j])
{
nflag=0;
break;
}
}
if(nflag)return 1;
bd++;
}
return 0;
}
inline void dfs(int st,int val)
{
if(val>ans)ans=val;
for(int i=head[st];i;i=edge[i].next)
{
int v=edge[i].to;
if(flag[v]==2)continue;
flag[v]++;
dfs(v,val+len[v]-edge[i].bad);
flag[v]--;
}
}
int main()
{
n=read();
for(int i=1;i<=n;i++)
{
scanf("%s",s[i]+1);
len[i]=strlen(s[i]+1);
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(check(i,j))
add(i,j,bd);
}
}
c=getchar();
c=getchar();
for(int i=1;i<=n;i++)
{
flag[i]=1;
if(s[i][1]==c)dfs(i,len[i]);
flag[i]=0;
}
write(ans);
}