#include <stdio.h>
#include <string.h>
char w[23][20];
int n;
int f[23];//用于标记用了几次
char last[300];
int num = 1;
int max = 0;
void fun(char L[300]) {
int flag = 0,len=0;
for (int i = 1; i <= n; i++) {
for (int j = strlen(L) - 1; j > 0; j--) { //倒着查找与W[i][0]相同的字母;
if (L[j] == w[i][0]) {
len = strlen(L) - 1 - j; //找到之后记录与L最后一个字母的距离
}
}
if (len) { //如果找到了检查这段长度的字母是否重合
for (int j = strlen(L) - 1 - len; j<strlen(L); j++) {
if (L[j] != w[i][j-strlen(L)+1+len])
len = 0; //不重合len=0
}
}
if (len!=0&&f[i]<2) { //如果找到且可以使用
num += strlen(w[i]) - len; //长度增加
f[i]++; //次数加一
char p[300];
strcpy(p, L); //记录原来的L
strcat(p, w[i] + len);
fun(p); //进去拼接后的p
num = num - strlen(w[i]) + len;//回溯
f[i]--;
num =num- strlen(w[i]) + 1;
flag = 1;
}
}
if (flag == 0) { //如果没有拼接,判断是否是优解
if (num > max) { max = num; }
}
}
int main(){
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%s", w[i]);
}
scanf(" %c", &last[0]);
fun(last);
printf("%d", max);
return 0;
}