RT
#include<bits/stdc++.h>
using namespace std;
int n;
char s[1000010],t[1000010];
char trie[1000010][30];
int fail[1000010];
int ncnt[1000010];
int cnt = 0;
void inser(){
int id = 0;
int leng = strlen(s);
for(int i = 0; i < leng; i++){
if(trie[id][s[i]-'a']) id = trie[id][s[i]-'a'];
else {
cnt++;
trie[id][s[i]-'a'] = cnt;
id = cnt;
}
}
ncnt[id]++;
}
void buildfail(){
queue<int> unq;
fail[0] = 0;
for(int i = 0; i < 26; i++){
if(trie[0][i]){
unq.push(trie[0][i]);
fail[trie[0][i]] = 0;
}
}
while(!unq.empty()){
int fir = unq.front();
unq.pop();
for(int i = 0 ; i < 26; i++){
if(trie[fir][i]){
fail[trie[fir][i]] = trie[fail[fir]][i];
unq.push(trie[fir][i]);
} else {
trie[fir][i] = trie[fail[fir]][i];
}
}
}
}
void query(){
int id = 0,ans = 0,leng = strlen(t);
//printf("%s %d\n",t,leng);
for(int i = 0; i < leng; i++){
id = trie[id][t[i]-'a'];
//printf("\n--------\n%d\n",id);
for(int j = id; j&&ncnt[j]!=-1; j = fail[j]){
//printf("%d[%d]|",j,ncnt[j]);
ans+=ncnt[j];
ncnt[j] = -1;
}
}
printf("%d",ans);
}
int main(){
//freopen("3808_1.in","r",stdin);
scanf("%d",&n);
while(n--){
scanf("%s", s);
inser();
}
buildfail();
/*
for(int i = 0; i <= cnt; i++) printf("%2d|",i);
puts("");
for(int i = 0; i <= cnt; i++) printf("%2d|",fail[i]);
puts("");
for(int i = 0; i <= cnt; i++) printf("%2d|",ncnt[i]);
puts("");
*/
scanf("%s", t);
query();
return 0;
}