#include <stdio.h>
#define N 1001
int din[N][N],cate[N];
int can[N][N],sump[N][N];
int main()
{
FILE *fin, *fout;
fin=fopen("matrix.in", "r");
fout=fopen("matrix.out", "w");
int n,m;
fscanf(fin, "%d%d ", &n, &m);
int i;
for(i=1; i<=n; i++)
{
int j;
for(j=1; j<=n; j++)
{
int ch=fgetc(fin);
din[i][j]=ch-'a';
}
fscanf(fin," ");
}
for(i=0; i<m; i++)
{
int j;
for(j=0; j<m; j++)
{
int ch=fgetc(fin);
cate[ch-'a']++;
}
fscanf(fin," ");
}
int alf;
for(alf=0; alf<26; alf++)
{
int j;
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
{
sump[i][j]=sump[i][j-1]+sump[i-1][j]-sump[i-1][j-1];
if(din[i][j]==alf)
sump[i][j]++;
if(sump[i][j]==cate[alf]&&can[i][j]==alf)
can[i][j]=alf+1;
}
for(i=m; i<=n; i++)
for(j=m; j<=n; j++)
if(sump[i][j]-sump[i-m][j]-sump[i][j-m]+sump[i-m][j-m]==cate[alf]&&can[i][j]==alf)
can[i][j]=alf+1;
}
int sumpol=0;
for(i=1; i<=n; i++)
{
int j;
for(j=1; j<=n; j++)
if(can[i][j]==26)
sumpol++;
}
fprintf(fout, "%d\n", sumpol);
return 0;
}