#include <iostream>
#include <cstdio>
#include <string>
#include <vector>
#include <map>
#include <set>
#include <algorithm>
using namespace std;

void debug(const vector<string>& v){
	for(int y=0 ; y < v.size() ; y++ ){
		cout << v[y] << endl;
	}
	cout << endl;
}

string to_b(char c){
	int n;
	if( 'A' <= c && c <= 'Z' ){
		n = c - 'A';
	}else if( 'a' <= c && c <= 'z' ){
		n = c - 'a' + 26;
	}else if( '0' <= c && c <= '9' ){
		n = c - '0' + 52;
	}else if( c == '+' ){
		n = 62;
	}else if( c == '/' ){
		n = 63;
	}
	string s;
	for(int i=0; i < 6 ; i++ ){
		s.push_back( (n & 1) + '0' );
		n = (n >> 1);
	};
	reverse(s.begin(), s.end());
	return s;
}

typedef unsigned long long ull;
const ull B = 100000007;
// hash[y][x] := image[y][x] テ」ツ?凝」ツつ?p テヲツ鳴?・ツュツ療」ツ?ョテ」ツδ湘」ツδε」ツつキテ」ツδ・テ・ツ?、テ」ツ?古ィツソツ氾」ツ?」テ」ツ?ヲテ」ツ?湘」ツつ?
ull H[1001][1001] = {0};
// b[i] := b^i;
ull b[101];
// memo[y][x] := (x,y) テ」ツ?ァテ」ツδ榲」ツδε」ツδ?」ツ?療」ツ?淌」ツ?凝」ツ?ゥテ」ツ??」ツ??
bool memo[1001][1001];

// テ、ツサツサテヲツ?湘」ツ?ョx,y (x = 0..w-1, y = 0..h-1)テ」ツ?ォテ」ツ?、テ」ツ??」ツ?ヲ
// image[y][x] テ」ツ?凝」ツつ?p テヲツ鳴?・ツュツ療」ツ?ョテ」ツδ湘」ツδε」ツつキテ」ツδ・テ・ツ?、テ」ツつ津」ツ?づ」ツつ嘉」ツ?凝」ツ?佚」ツつ?ィツィツ暗ァツョツ療」ツ?凖」ツつ?
void hash(const vector<string>& s, int p){
	int h = s.size(), w = s[0].size();
	
	for(int y=0 ; y < h ; y++ ){
		for(int x=0 ; x + p <= w ; x++ ){
			H[y][x] = 0;
			if( x == 0 ){
				for(int k=0 ; k < p ; k++ ){
					H[y][x] += (s[y][x+k]-'0') * b[p-k-1];
				}
			}else{
				H[y][x] = H[y][x-1] * B - ((s[y][x-1]-'0') * b[p]) + (s[y][x+p-1]-'0');
			}
		}
	}
}

// s(w*h) テ」ツ?凝」ツつ?t (p*p) テ」ツ?ョテ」ツδ妥」ツつソテ」ツδシテ」ツδウテ」ツつ津ヲツ、ツ愿ァツエツ「テ」ツ?凖」ツつ?
int search(const vector<string>& s, const vector<string>& t){
	int h1 = s.size(), w1 = s[0].size(), h2 = t.size(), w2 = t[0].size();
	
	// テ・ツ?暗」ツ?ォ t[y] テ」ツ?凝」ツつ?p テヲツ鳴?・ツュツ?p == w2)テ」ツ?ョテ」ツδ湘」ツδε」ツつキテ」ツδ・テ・ツ?、テ」ツつ津ィツィツ暗ァツョツ療」ツ?療」ツ?ヲテ」ツ?甘」ツ??
	vector<ull> T(h2, 0);
	for(int y=0 ; y < h2 ; y++ ){
		for(int x=0 ; x < w2 ; x++ ){
			T[y] += (t[y][x]-'0') * b[w2-x-1];
		}
	}
	
	int res = 0;
	for(int py = 0 ; py + h2 <= h1 ; py++ ){
		for(int px = 0 ; px + w2 <= w1 ; px++ ){
			bool flag = true;
			for(int y = 0 ; y < h2 ; y++ ){
				if( H[py+y][px] != T[y] ){
					flag = false;
					break;
				}
			}
			if( flag && !memo[py][px] ){
				memo[py][px] = true;
				res++;
			}
		}
	}
	return res;
}

// テ・ツキツヲテ・ツ渉ウテ・ツ渉催ィツサツ「
vector<string> flip_right_left(const vector<string>& m_ ){
	vector<string> m = m_;
	int h = m.size(), w = m[0].size();
	for(int y = 0 ; y < h ; y++ ){
		for(int x = 0 ; x < w/2 ; x++ ){
			swap( m[y][x] , m[y][w-x-1] );
		}
	}
	return m;
}
// テ・ツ渉ウテ」ツ?ォ 90 テ・ツコツヲテ・ツ崢榲ィツサツ「
vector<string> right_rot(const vector<string>& m_ ){
	int w = m_[0].size(), h = m_.size();
	vector<string> m( w );
	for(int y = h-1 ; y >= 0 ; y-- ){
		for(int x = 0 ; x < w ; x++ ){
			m[x].push_back( m_[y][x] );
		}
	}
	return m;
}
// テ・ツ渉催ィツサツ「テ」ツ?ィ90テ・ツコツヲテ・ツ崢榲ィツサツ「 2*4 = 8 テ」ツδ妥」ツつソテ」ツδシテ」ツδウテ」ツ?ョテァツ板淌ヲツ按?
vector< vector<string> > generate_pattern(vector<string> p){
	set< vector<string> > s;
	vector< vector<string> > res;
	
	for(int i=0 ; i < 4 ; i++ ){
		s.insert( p );
		p = right_rot( p );
	}
	p = flip_right_left( p );
	for(int i=0 ; i < 4 ; i++ ){
		s.insert( p );
		p = right_rot( p );
	}
	for(set< vector<string> >::iterator it = s.begin() ; it != s.end() ; ++it ){
		res.push_back( *it );
	}
	return res;
}

// 0 or 1 テ」ツ?ョbitテ・ツ按療」ツ?ォテ・ツアツ陛ゥツ鳴凝」ツ?療」ツ?ヲ w * h テ」ツ?ォテ・ツ按?」ツつ甘・ツ?コテ」ツ?療」ツ?ヲティツソツ氾」ツ??
vector<string> decode(const vector<string>& v, int w, int h){
	vector<string> res(h), v_(h);
	for(int y=0 ; y < h ; y++ ){
		for(int x=0 ; x < v[y].size() ; x++ ){
			v_[y] += to_b( v[y][x] );
		}
	}
	for(int y=0 ; y < h ; y++ ){
		for(int x=0 ; x < w ; x++ ){
			res[y].push_back( v_[y][x] );
		}
	}
	return res;
}

int main(){
	// B^0 .. B^100 テ」ツつ津・ツ?暗」ツ?ォティツィツ暗ァツョツ療」ツ?療」ツ?ヲテ」ツ?甘」ツ??
	b[0] = 1;
	for(int i=1 ; i < 101 ; i++ ){
		b[i] = b[i-1] * B;
	}
	
	int w, h, p;
	while( cin >> w >> h >> p , w || h || p ){
		for(int y=0 ; y < 1001 ; y++ ) fill(memo[y], memo[y]+1001, false);
		vector<string> image(h), pattern(p);
		
		for(int y=0 ; y < h ; y++ ){
			cin >> image[y];
		}
		for(int y=0 ; y < p ; y++ ){
			cin >> pattern[y];
		}
		image = decode(image, w, h);
		pattern = decode(pattern, p, p);
		
		// テ」ツ?づ」ツつ嘉」ツ?凝」ツ?佚」ツつ?」ツδ湘」ツδε」ツつキテ」ツδ・テ・ツ?、テ」ツつ津ィツィツ暗ァツョツ?
		hash(image, p);
		// テ・ツ崢榲ィツサツ「テ」ツδサテ・ツキツヲテ・ツ渉ウテ・ツ渉催ィツサツ「テ」ツ?ョ8テ」ツδ妥」ツつソテ」ツδシテ」ツδウテ」ツつ津ァツ板淌ヲツ按?
		vector< vector<string> > p = generate_pattern( pattern );
		// テヲツ篠「テァツエツ「
		int ans = 0;
		for(int i=0 ; i < p.size() ; i++ ){
			ans += search(image, p[i]);
		}
		// ティツァツ」テ」ツつ津・ツ?コテ・ツ環?
		cout << ans << endl;
	}
}

Measured memory_bytes: 12784