#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 2e4 + 5, M = 2e5 + 5;
struct node{
int vis[26];
int end;
}trie[N];
int cnt = 0;
void insert(string s){
int p = 0;
for(int i = 0; i < s.length(); i++){
if(!trie[p].vis[s[i] - 'A']) trie[p].vis[s[i] - 'A'] = ++cnt;
p = trie[p].vis[s[i] - 'A'];
}
trie[p].end = 1;
}
bool f[M];
bool vis[M];
void dfs(string s, int pos){
if(pos == s.length()) return;
if(vis[pos]) return;
vis[pos] = 1;
int p = 0;
for(int i = pos; i < s.length(); i++){
if(trie[p].vis[s[i] - 'A']) p = trie[p].vis[s[i] - 'A'];
else return;
if(trie[p].end){
f[i + 1] = 1;
dfs(s, i + 1);
}
}
}
void solve(){
string s;
while(cin >> s){
if(s == ".") break;
insert(s);
}
string temp;
s.clear();
while(cin >> temp) s += temp;
dfs(s, 0);
for(int i = s.length(); i >= 1; i--){
if(f[i]){
cout << i << '\n';
return;
}
}
cout << 0;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t = 1;
while(t--){
solve();
}
return 0;
}