#include <bits/stdc++.h>
#pragma GCC optimize("O3")
using namespace std;
int w, n, m;
int arr[40005];
char s[15];
int E[15][2];
int cnt[5782969];
inline int get(int bitValue, char op) {
  if (op == 'A')
    return bitValue == 0 ? 2 : 0;
  else if (op == 'O')
    return bitValue == 0 ? 0 : -1;
  else if (op == 'X')
    return bitValue == 0 ? 0 : 1;
  else if (op == 'a')
    return bitValue == 1 ? 1 : -1;
  else if (op == 'o')
    return bitValue == 1 ? 2 : 1;
  else if (op == 'x')
    return bitValue == 0 ? 1 : 0;
  else
    assert(0);
  return -1;
}
int occ[1 << 13];
int D[100005];
int IND;
int B[15], U[15];
int main() {
  ios::sync_with_stdio(false);
  scanf("%d%d%d", &w, &n, &m);
  for (int i = 0; i < n; i++) {
    scanf("%d", arr + i);
    if (occ[arr[i]] == 0) D[IND++] = arr[i];
    occ[arr[i]]++;
  }
  for (int val = 0; val < (1 << w); val++) {
    if (occ[val] == 0) continue;
    for (int msk = 0; msk < (1 << w); msk++) {
      int newVal = 0, u = 1;
      for (int bit = 0; bit < w; bit++) {
        if (msk & (1 << bit)) {
          int m = ((val & (1 << bit)) > 0 ? 1 : 0);
          newVal += u * m;
        } else {
          newVal += u * 2;
        }
        u *= 3;
      }
      cnt[newVal] += occ[val];
    }
  }
  int uu = 1;
  for (int bit = 0; bit < w; bit++) B[bit] = bit, U[bit] = uu, uu *= 3;
  for (int z = 0; z < m; z++) {
    scanf("%s", s);
    for (int i = 0; i < w; i++) E[i][0] = get(0, s[i]), E[i][1] = get(1, s[i]);
    int ans = 0;
    for (int i = 0; i < w; i++) {
      int x = rand() % w;
      int y = rand() % w;
      swap(B[x], B[y]);
      swap(U[x], U[y]);
    }
    for (int i = 0; i < IND; i++) {
      int val = 0;
      for (int bit = 0; bit < w; bit++) {
        int v = E[w - B[bit] - 1][(D[i] & (1 << B[bit])) > 0 ? 1 : 0];
        if (v == -1) {
          val = -1;
          break;
        }
        val += v * U[bit];
      }
      if (val == -1) continue;
      ans += cnt[val] * occ[D[i]];
    }
    printf("%d\n", ans);
  }
  return 0;
}
