RT
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <string>
#include <cstring>
#include <queue>
#include <vector>
#include <map>
#include <stdlib.h>
#include <time.h>
using namespace std;
int CtoI[1003];
struct Trie{
int son[30];
int sum=0;
int fail;
int vis=0,revis=0;
int flag;
int ru=0;
}a[1000006];
int cnt=1;
void init()
{
for(int i=1;i<=cnt;i++)
{
a[i].vis=a[i].revis=0;
}
}
int getint(char c)
{
return CtoI[c];
}
void add(string s,int num)
{
int now=1;
for(int i=0;s[i];i++)
{
if(!a[now].son[getint(s[i])])
a[now].son[getint(s[i])]=++cnt;
now=a[now].son[getint(s[i])];
}
a[now].sum++;
if(!a[now].flag )
a[now].flag=num;
}
bool find(string s)
{
int now=1;
for(int i=0;s[i];i++)
{
if(!a[now].son[getint(s[i])])
return 0;
now=a[now].son[getint(s[i])];
}
return a[now].sum;
}
void biuld()
{
queue<int> q;
for(int i=0;i<30;i++)
a[0].son[i]=1;
//a[0].ru++;
/*for(int i=0;i<30;i++)
{
if(a[1].son[i])
{
a[a[1].son[i]].fail =1;
a[1].ru ++;
q.push(a[1].son[i]);
}
}*/
q.push(1);
while(!q.empty())
{
int u=q.front();
q.pop();
for(int i=0;i<30;i++)
{
int v=a[u].son[i];
if(!v)
a[u].son[i]=a[a[u].fail].son[i] ;
else
{
a[v].fail=a[a[u].fail ].son[i];
//a[a[a[u].fail].son[i]].ru++;
q.push(v);
}
}
}
}
void solve(string s)
{
init();
int now=1;
for(int i=0;s[i];i++)
{
now=a[now].son[getint(s[i])];
if(a[now].sum )
cout<<now<<endl;
//cout<<now<<endl;
a[now].vis++;
}
}
void topo()
{
for(int i=1;i<=cnt;i++)
a[a[i].fail ].ru++;
queue<int> q;
//cout<<cnt<<endl;
for(int i=1;i<=cnt;i++)
if(!a[i].ru )
{
q.push(i);
//cout<<i<<endl;
}
while(!q.empty())
{
int u=q.front();
q.pop();
int v=a[u].fail;
a[v].vis+=a[u].vis;
a[v].ru--;
if(!a[v].ru )
{
//if(a[u].vis&&a[v].sum )
//cout<<u<<" "<<v<<endl;
q.push(v);
}
}
}
int gettime(string s)
{
solve(s);
topo();
int ans=0;
for(int i=1;i<=cnt;i++)
ans+=a[i].sum*a[i].vis;
return ans;
}
int getsum(string s)
{
solve(s);
topo();
int ans=0;
for(int i=1;i<=cnt;i++)
{
if(!a[i].sum)
continue;
//if(a[i].vis )
//cout<<i<<" "<<endl;
}
for(int i=1;i<=cnt;i++)
ans+=a[i].sum*(a[i].vis!=0);
return ans;
}
int getmax(string s)
{
solve(s);
topo();
int ans=0;
for(int i=1;i<=cnt;i++)
{
if(a[i].sum*a[i].vis>a[ans].sum*a[ans].vis )
ans=i;
}
return ans;
}
int n;
int main()
{
for(int i='a';i<='z';i++)
CtoI[i]=i-'a';
cin>>n;
for(int i=1;i<=n;i++)
{
string s;
cin>>s;
add(s,i);
}
biuld();
string s;
cin>>s;
cout<<getsum(s);
return 0;
}