#include <bits/stdc++.h>
using namespace std;
int n, m, q;
int cnt[(1 << 12) + 10];
int memori[(1 << 12) + 10][12][105];
int w[15];
int dfs(int x, int id, int sumtmp) {
  if (sumtmp < 0) return 0;
  if (id == n) {
    return cnt[x];
  }
  if (memori[x][id][sumtmp] != -1) return memori[x][id][sumtmp];
  return memori[x][id][sumtmp] = dfs(x ^ (1 << (n - 1 - id)), id + 1, sumtmp) +
                                 dfs(x, id + 1, sumtmp - w[id]);
}
int main() {
  scanf("%d%d%d", &n, &m, &q);
  for (int i = 0; i < n; i++) scanf("%d", &w[i]);
  for (int i = 0; i < m; i++) {
    char tmp[15];
    scanf("%s", tmp);
    int x = 0;
    for (int j = 0; j < n; j++) {
      if (tmp[j] == '1') x += 1 << (n - 1 - j);
    }
    cnt[x]++;
  }
  memset(memori, -1, sizeof(memori));
  for (int i = 0; i < q; i++) {
    char tmp[15];
    scanf("%s", tmp);
    int x = 0;
    for (int i = 0; i < n; i++) {
      if (tmp[i] == '1') x += 1 << (n - i - 1);
    }
    int require;
    scanf("%d", &require);
    printf("%d\n", dfs(x, 0, require));
  }
  return 0;
}
