#include<stdio.h>
#include<string.h>
#include<vector>
#include<algorithm>
#define mod1 1000007
#define mod2 1000023
using namespace std;
char a[10000001],cuv[30];
long treila1[21],treila2[30],val1,val2,hash1[50001],hash2[50001];
int nrap;
long h1(int m, char *s)
{
int i,prod=0;
for(i=0;i<m;i++)
prod=(prod+treila1[m-i-1]*(s[i]-'a'))%mod1;
return prod;
}
long h2(int m, char *s)
{
int i,prod=0;
for(i=0;i<m;i++)
prod=(prod+treila2[m-i-1]*(s[i]-'a'))%mod2;
return prod;
}
int sortFunction( const void *a, const void *b)
{
long intOne = *((long*)a);
long intTwo = *((long*)b);
if (intOne < intTwo)
return -1;
if (intOne == intTwo)
return 0;
return 1;
}
int caut_bin(long *p,int dim, long val)
{
int m,pr,ul;
pr=1;
ul=dim;
while(pr<=ul)
{
m=(pr+ul)/2;
if(val==p[m])
return 1;
if(val<p[m])
ul=m-1;
else
pr=m+1;
}
return 0;
}
int main()
{
int i,n,m,k;
FILE *f=fopen("abc2.in","r");
freopen("abc2.out","w",stdout);
fscanf(f,"%s\n",a);
fscanf(f,"%s\n",cuv);
n=strlen(a);
m=strlen(cuv);
treila1[0]=treila2[0]=1;
for(i=1;i<=20;i++)
{
treila1[i]=(treila1[i-1]*3)%mod1;
// treila2[i]=(treila2[i-1]*3)%mod2;
}
hash1[1]=h1(m,cuv);
//hash2[1]=h2(m,cuv);
k=1;
while(!feof(f))
{
fscanf(f,"%s",cuv);
hash1[++k]=h1(m,cuv);
// hash2[k]=h2(m,cuv);
}
qsort((void *)hash1, k, sizeof(long), sortFunction);
// qsort((void *)hash2, k, sizeof(long), sortFunction);
val1=h1(m,a);
//val2=h2(m,a);
if(caut_bin(hash1,k,val1)&&caut_bin(hash2,k,val2))
nrap++;
for(i=1;i<=n-m+1;i++)
{ val1=((val1-treila1[m-1]*(a[i-1]-'a')+mod1)*3+(a[i+m-1]-'a'))%mod1;
// val2=((val2-treila2[m-1]*(a[i-1]-'a')+mod2)*3+(a[i+m-1]-'a'))%mod2;
if(caut_bin(hash1,k,val1))//&&caut_bin(hash2,k,val2))
nrap++;
}
printf("%d",nrap);
fclose(f);
return 0;
}