#include <bits/stdc++.h>
using namespace std;
void bktk(int i, char *s, int val, int &ans, vector<int> &cnt) {
  if (!s[i]) {
    ans += cnt[val];
    return;
  }
  val *= 3;
  if (s[i] == 'A') {
    bktk(i + 1, s, val, ans, cnt);
    bktk(i + 1, s, val + 1, ans, cnt);
  }
  if (s[i] == 'a') {
    bktk(i + 1, s, val + 2, ans, cnt);
  }
  if (s[i] == 'O') {
    bktk(i + 1, s, val, ans, cnt);
  }
  if (s[i] == 'o') {
    bktk(i + 1, s, val + 1, ans, cnt);
    bktk(i + 1, s, val + 2, ans, cnt);
  }
  if (s[i] == 'X') {
    bktk(i + 1, s, val, ans, cnt);
    bktk(i + 1, s, val + 2, ans, cnt);
  }
  if (s[i] == 'x') {
    bktk(i + 1, s, val + 1, ans, cnt);
  }
}
int main() {
  int w, n, m;
  scanf("%d %d %d", &w, &n, &m);
  vector<int> f(1 << w, 0);
  for (int i = 1; i <= n; i++) {
    int x;
    scanf("%d", &x);
    f[x]++;
  }
  vector<int> b3(1 << w, 0);
  for (int i = 0; i < (1 << w); i++) {
    for (int k = w - 1; k >= 0; k--) {
      b3[i] = b3[i] * 3 + ((i >> k) & 1);
    }
  }
  vector<int> cnt(531441, 0);
  for (int i = 0; i < (1 << w); i++) {
    for (int j = 0; j < (1 << w); j++) {
      cnt[b3[i] + b3[j]] += f[i] * f[j];
    }
  }
  while (m--) {
    char s[14];
    scanf("%s", s);
    int ans = 0;
    bktk(0, s, 0, ans, cnt);
    printf("%d\n", ans);
  }
}
