#include<cstdio>
#include<cstring>
#include<string>
#include<iostream>
using namespace std;
const int N=2e5+5;
int id=1;
char p[202][12];
char str[N];
int nxt[202][12];
bool dp[N],vis[202][N];
void init(){
while(scanf("%s",p[id]+1),p[id][1]!='.')
id++;
id--;id--;
int len=0;
string s,temp;
while(cin>>temp)
s+=temp;
strcpy(str+1,s.c_str());
return;
}
void KMP(int k){
int len1=strlen(str+1),len2=strlen(p[k]+1);
for(int i=2,j=0;i<=len2;i++){
while(j>0&&p[k][i]!=p[k][j+1])
j=nxt[k][j];
if(p[k][i]==p[k][j+1]) j++;
nxt[k][i]=j;
}
for(int i=1,j=0;i<=len1;i++){
while(j>0&&str[i]!=p[k][j+1])
j=nxt[k][j];
if(str[i]==p[k][j+1]) j++;
if(j==len2){
vis[k][i]=true;
j=nxt[k][j];
}
}
}
int main(){
init();
for(int i=1;i<=id;i++)
KMP(i);
int len=strlen(str+1);
dp[0]=true;
for(int i=1;i<=len;i++)
for(int j=1;j<=id;j++)
if(vis[j][i]) dp[i]=dp[i]||dp[i-strlen(p[j]+1)];
for(int i=len;i>=0;i--)
if(dp[i]){
printf("%d",i);
break;
}
cout<<str+1;
return 0;
}