#include<bits/stdc++.h>
using namespace std;
struct nob{
int fail,son[27],ed;
}a[1000000];
int cnt=0;
void build (string s){
int now=0;
for (int i=0; i<s.length(); i++){
if (a[now].son[s[i]-'a']==0)
a[now].son[s[i]-'a']=++cnt;
now=a[now].son[s[i]-'a'];
}
a[now].ed++;
}
void fail(){
queueque;
for (int i=0; i<26; i++){
if (a[0].son[i]!=0){
a[a[0].son[i]].fail=0;
que.push(a[0].son[i]);
}
}
while (que.size()){
int pos=que.front();
que.pop();
for (int i=0; i<26; i++){
if (a[pos].son[i]!=0){
a[a[pos].son[i]].fail=a[a[pos].fail].son[i];
que.push(a[pos].son[i]);
}
else a[pos].son[i]=a[a[pos].fail].son[i];
}
}
}
int answer(string s){
int now=0,ans=0;
for (int i=0; i<s.length(); i++){
now=a[now].son[s[i]-'a'];
for (int t=now; t&&a[t].ed!=-1; t=a[t].fail){
ans+=a[t].ed;
a[t].ed=-1;
}
}
return ans;
}
int main(){
int n;
string s;
cin>>n;
for (int i=1; i<=n; i++){
cin>>s;
build(s);
}
a[0].fail=0;
fail();
cin>>s;
cout<<answer(s)<<endl;
return 0;
}