#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <utility>
#include <set>
#define maxw 1005
#define maxp 105

using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef vector< vector<bool> > Mb; // 1-indexed.
//const ull Br = 7ull;
//const ull Bc = 11ull;
const ull Br = 233ull;
const ull Bc = 998244353ull;

int w, h, p;
char s[maxw];
Mb ima, pat, tmp;
ull has[maxw][maxw], powBr, powBc;
int decrypt(char c){
  if(c >= 'A' && c <= 'Z') return c - 'A';
  if(c >= 'a' && c <= 'z') return c - 'a' + 26;
  if(c >= '0' && c <= '9') return c - '0' + 52;
  if(c == '+') return 62;
  return 63;
}
void calcHash(Mb a, int n, int m){ // n * m.
  for(int i = 1;i <= n;i++){
    for(int j = 1;j <= m;j++) has[i][j] = has[i][j - 1] * Br + a[i][j];
    for(int j = m;j >= p;j--) has[i][j] -= has[i][j - p] * powBr;
  }
  
//  cout << has[n][m] << endl;
//  system("pause");
  
  for(int i = p;i <= m;i++){
    for(int j = 1;j <= n;j++) has[j][i] = has[j - 1][i] * Bc + has[j][i];
    for(int j = n;j >= p;j--) has[j][i] -= has[j - p][i] * powBc;
  }
}
void fli(Mb &a, int n, int m){
  for(int i = 1;i <= n;i++) reverse(a[i].begin() + 1, a[i].begin() + m + 1);
}
void rot(Mb &a, int n, int m){
  for(int i = 1;i <= n;i++){
    for(int j = 1;j <= m;j++){
      tmp[j][p - i + 1] = a[i][j];
    }
  }
  a = tmp;
}
int main(){
  while(~scanf("%d%d%d", &w, &h, &p) && h){
    powBr = powBc = 1;
    for(int i = 1;i <= p;i++) powBr *= Br, powBc *= Bc;
    ima.resize(h + 1);
    for(int i = 1;i <= h;i++){
      ima[i].resize(w + 1);
      scanf("%s", s);
      for(int j = 1;j <= w;j += 6){
        int x = decrypt(s[j / 6]);
        for(int k = j + 5;k >= j;k--){
          ima[i][k] = x & 1;
          x >>= 1;
        }
      }
    }
    pat.resize(p + 1), tmp.resize(p + 1);
    for(int i = 1;i <= p;i++){
      pat[i].resize(p + 1), tmp[i].resize(p + 1);
      scanf("%s", s);
      for(int j = 1;j <= p;j += 6){
        int x = decrypt(s[j / 6]);
        for(int k = j + 5;k >= j;k--){
          pat[i][k] = x & 1;
          x >>= 1;
        }
      }
    }
    
//    for(int i = 1;i <= h;i++){
//      for(int j = 1;j <= w;j++){
//        cout << ima[i][j] << " ";
//      }
//      cout << endl;
//    }
//    for(int i = 1;i <= p;i++){
//      for(int j = 1;j <= p;j++){
//        cout << pat[i][j] << " ";
//      }
//      cout << endl;
//    }
//    system("pause");
    
//    calcHash(pat, p, p);
//    cout << has[p][p] << endl;
//    system("pause");
    
    set <ull> pats;
    for(int i = 1;i <= 2;i++){
      for(int j = 1;j <= 4;j++){
        calcHash(pat, p, p);
        pats.insert(has[p][p]);
        rot(pat, p, p);
      }
      fli(pat, p, p);
    }
    
//    cout << pats.size() << endl;

//    cout << *pats.begin() << endl;
//    system("pause");
    
    int ans = 0;
    calcHash(ima, h, w);
    for(int i = p;i <= h;i++){
      for(int j = p;j <= w;j++){
        ans += pats.count(has[i][j]);
      }
    }
    printf("%d\n", ans);
  }
  return 0;
}
