#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#pragma GCC optimize("O4")
using namespace std;
template <typename T>
void read_to_vector(size_t N, std::vector<T> &v) {
  for (size_t i = 0; i < N; i++) {
    T tmp;
    std::cin >> tmp;
    v.push_back(tmp);
  }
}
template <typename T>
void print_vector(const std::vector<T> &v) {
  for (auto it = v.begin(); it < v.end(); it++) {
    if (it != v.begin()) std::cout << " ";
    std::cout << (*it);
  }
}
char op[128];
int maskbit[128][2];
int valbit[128][2];
int mask_a[128];
int mask_b[128];
int mask_c[128];
int val_a[128];
int val_b[128];
int val_c[128];
void solve() {
  long long w, n, m;
  cin >> w >> n >> m;
  long long NW = 1 << w;
  vector<int> counts(NW);
  for (int i = 0; i < n; i++) {
    long long a;
    cin >> a;
    counts[a]++;
  }
  vector<int> maskcounts((1 << 24));
  for (int i = 0; i < NW; i++) {
    for (int mask = 0; mask < NW; mask++) {
      maskcounts[(mask << 12) + (mask & i)] += counts[i];
    }
  }
  for (int i = 0; i < m; i++) {
    string s;
    cin >> s;
    int maska = 0, maskb = 0, maskc = 0;
    int vala = 0, valb = 0, valc = 0;
    for (int k = 0; k < 12; k++) {
      maska |= mask_a[s[w - k - 1]] << k;
      maskb |= mask_b[s[w - k - 1]] << k;
      maskc |= mask_c[s[w - k - 1]] << k;
      vala |= val_a[s[w - k - 1]] << k;
      valb |= val_b[s[w - k - 1]] << k;
      valc |= val_c[s[w - k - 1]] << k;
    }
    int res = 0;
    for (int word = 0; word < NW; word++) {
      int mask = maska & (maskb | (maskc ^ word));
      int val = vala & (valb | (valc ^ word));
      res += counts[word] * maskcounts[(mask << 12) | val];
    }
    cout << res << endl;
  }
}
void pre_compute() {
  op['A'] = 0;
  op['O'] = 1;
  op['X'] = 2;
  op['a'] = 3;
  op['o'] = 4;
  op['x'] = 5;
  maskbit['A'][0] = 0;
  valbit['A'][0] = 0;
  maskbit['A'][1] = 1;
  valbit['A'][1] = 0;
  maskbit['O'][0] = 1;
  valbit['O'][0] = 0;
  maskbit['O'][1] = 0;
  valbit['O'][1] = 1;
  maskbit['X'][0] = 1;
  valbit['X'][0] = 0;
  maskbit['X'][1] = 1;
  valbit['X'][1] = 1;
  maskbit['a'][0] = 0;
  valbit['a'][0] = 1;
  maskbit['a'][1] = 1;
  valbit['a'][1] = 1;
  maskbit['o'][0] = 1;
  valbit['o'][0] = 1;
  maskbit['o'][1] = 0;
  valbit['o'][1] = 0;
  maskbit['x'][0] = 1;
  valbit['x'][0] = 1;
  maskbit['x'][1] = 1;
  valbit['x'][1] = 0;
  for (auto c : {'A', 'O', 'X', 'a', 'o', 'x'}) {
    mask_a[c] = maskbit[c][0] | maskbit[c][1];
    mask_b[c] = maskbit[c][0] & maskbit[c][1];
    mask_c[c] = maskbit[c][0];
    val_a[c] = valbit[c][0] | valbit[c][1];
    val_b[c] = valbit[c][0] & valbit[c][1];
    val_c[c] = valbit[c][0];
  }
}
int main() {
  std::cout << std::setprecision(15);
  std::ios::sync_with_stdio(false);
  std::cin.tie(0);
  pre_compute();
  solve();
  return 0;
}
