#include<bits/stdc++.h>
using namespace std;
struct ac_auto{
int vis[26];
int fail;
int tot;
}AC[1000001];
int cnt;
int n;
char mode[1000001];
char t[1000001];
int su(char a){
return a-'0';
}
void insert(char str[]){
int now=0,sus;
int leng=strlen(str);
for(int i=0;i<leng;i++){
sus=su(str[i]);
if(!AC[now].vis[sus]){
AC[now].vis[sus]=++cnt;
}
now=AC[now].vis[sus];
}
AC[now].tot++;
}
void Build_fail(){
queue<int>q;
for(int i=0;i<26;i++){
if(AC[0].vis[i]){
AC[AC[0].vis[i]].fail=0;
q.push(AC[0].vis[i]);
}
}
while(!q.empty()){
int now=q.front();
q.pop();
for(int i=0;i<26;i++){
if(AC[now].vis[i]){
AC[AC[now].vis[i]].fail=AC[AC[now].fail].vis[i];
q.push(AC[now].vis[i]);
}else{
AC[now].vis[i]=AC[AC[now].fail].vis[i];
}
}
}
}
int AC_query(){
int leng=strlen(t);
int now=0;
int ans=0;
for(int i=0;i<leng;i++){
now=AC[now].vis[su(t[i])];
for(int j=now;j&&AC[j].tot!=-1;j=AC[j].fail){
ans+=AC[j].tot;
AC[j].tot=-1;
}
}
return ans;
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%s",mode);
insert(mode);
}
AC[0].fail=0;
Build_fail();
scanf("%s",t);
printf("%d",AC_query());
return 0;
}