#include<stdio.h>
#include<algorithm>
using namespace std;
char str[1100][1100];
int in[1100][1100];
int p[110][110];
long long L[1100][1100];
long long R[1100][1100];
long long pl[110];
long long pr[110];
int fail[110];
int ans[1100][1100];
int to[110][110];
int main(){
	int a,b,c;
	while(scanf("%d%d%d",&b,&a,&c),a){
		for(int i=0;i<a;i++)scanf("%s",str[i]);
		for(int i=0;i<a;i++){
			for(int j=0;str[i][j];j++){
				int t;
				if('A'<=str[i][j]&&str[i][j]<='Z')t=str[i][j]-'A';
				if('a'<=str[i][j]&&str[i][j]<='z')t=str[i][j]-'a'+26;
				if('0'<=str[i][j]&&str[i][j]<='9')t=str[i][j]-'0'+52;
				if(str[i][j]=='+')t=62;
				if(str[i][j]=='/')t=63;
				for(int k=0;k<6;k++){
					if(t&(1<<(5-k)))in[i][j*6+k]=1;
					else in[i][j*6+k]=0;
				}
			}
		}
		for(int i=0;i<c;i++)scanf("%s",str[i]);
		for(int i=0;i<c;i++){
			for(int j=0;str[i][j];j++){
				int t;
				if('A'<=str[i][j]&&str[i][j]<='Z')t=str[i][j]-'A';
				if('a'<=str[i][j]&&str[i][j]<='z')t=str[i][j]-'a'+26;
				if('0'<=str[i][j]&&str[i][j]<='9')t=str[i][j]-'0'+52;
				if(str[i][j]=='+')t=62;
				if(str[i][j]=='/')t=63;
				for(int k=0;k<6;k++){
					if(t&(1<<(5-k)))p[i][j*6+k]=1;
					else p[i][j*6+k]=0;
				}
			}
		}
		/*for(int i=0;i<a;i++){
			for(int j=0;j<b;j++)printf("%d",in[i][j]);
			printf("\n");
		}
		for(int i=0;i<c;i++){
			for(int j=0;j<c;j++)printf("%d",p[i][j]);
			printf("\n");
		}*/
		for(int i=0;i<b;i++){
			long long b1=0;
			long long b2=0;
			for(int j=0;j<a;j++){
				b2*=2;
				b1*=2;
				if(c<50&&(b1&(1LL<<c)))b1-=(1LL<<c);
				if(c>=50&&(b2&(1LL<<(c-50))))b2-=(1LL<<(c-50));
				if(b1&(1LL<<50)){
					b1-=(1LL<<50);
					b2++;
				}
				if(in[j][i])b1++;
				if(j>=c-1){
					L[j-c+1][i]=b1;
					R[j-c+1][i]=b2;
				}
			}
		}
		for(int i=0;i<c;i++){
			long long b1=0;
			long long b2=0;
			for(int j=0;j<c;j++){
				b2*=2;
				b1*=2;
				if(b1&(1LL<<50)){
					b1-=(1LL<<50);
					b2++;
				}
				if(p[j][i])b1++;
			}
			pl[i]=b1;
			pr[i]=b2;
		}
		for(int i=0;i<110;i++)fail[i]=0;
		for(int i=1;i<=c;i++){
			int at=i-1;
			while(at){
			//	printf("%d %d\n",i,at);
				int v=fail[at];
				if(pl[v]==pl[i-1]&&pr[v]==pr[i-1]){
					at=v+1;break;
				}
				at=v;
			}
		//	printf("%d: %d\n",i,fail[i]);
			fail[i]=at;
		}
		int ret=0;
		for(int i=0;i<a;i++)for(int j=0;j<b;j++)ans[i][j]=0;
for(int u=0;u<2;u++){
	for(int r=0;r<4;r++){
		for(int i=0;i<a-c+1;i++){
			int at=0;
			for(int j=0;j<b;j++){
				while((at==c||pl[at]!=L[i][j]||pr[at]!=R[i][j])){
					if(at==0)break;
					at=fail[at];
				}
				if(pl[at]==L[i][j]&&pr[at]==R[i][j])at++;
		//		printf("%d ",at);
				if(at==c)ans[i][j]=1;
			}
		}
		for(int i=0;i<c;i++)for(int j=0;j<c;j++)to[i][j]=p[j][c-1-i];
		for(int i=0;i<c;i++)for(int j=0;j<c;j++)p[i][j]=to[i][j];
		if(r==3){
			for(int i=0;i<c;i++)for(int j=0;j<c;j++)to[i][j]=p[i][c-1-j];
			for(int i=0;i<c;i++)for(int j=0;j<c;j++)p[i][j]=to[i][j];
		}
		for(int i=0;i<c;i++){
			long long b1=0;
			long long b2=0;
			for(int j=0;j<c;j++){
				b2*=2;
				b1*=2;
				if(b1&(1LL<<50)){
					b1-=(1LL<<50);
					b2++;
				}
				if(p[j][i])b1++;
			}
			pl[i]=b1;
			pr[i]=b2;
		}
		for(int i=0;i<110;i++)fail[i]=0;
		for(int i=1;i<=c;i++){
			int at=i-1;
			while(at){
			//	printf("%d %d\n",i,at);
				int v=fail[at];
				if(pl[v]==pl[i-1]&&pr[v]==pr[i-1]){
					at=v+1;break;
				}
				at=v;
			}
		//	printf("%d: %d\n",i,fail[i]);
			fail[i]=at;
		}
	}
}
		ret=0;
		for(int i=0;i<a;i++)for(int j=0;j<b;j++)if(ans[i][j])ret++;
		printf("%d\n",ret);
	}
}

Measured memory_bytes: 30560