#include <bits/stdc++.h>
using namespace std;
vector<int> query[1 << 13][105];
long long cost[15], fre[1 << 13];
int can[1 << 13][105];
int ans[500100];
int get_decimal(char str[], int len);
void pre_process(int n);
int get_cost(int i, int j, int n);
int main() {
  int n, m, q;
  scanf("%d %d %d", &n, &m, &q);
  for (int i = 0; i < n; i++) scanf("%lld", &cost[i]);
  char str[100];
  for (int i = 0; i < m; i++) {
    scanf("\n%s", str);
    int num = get_decimal(str, strlen(str));
    fre[num]++;
  }
  int k;
  for (int i = 0; i < q; i++) {
    scanf("\n%s %d", str, &k);
    int num = get_decimal(str, strlen(str));
    query[num][k].push_back(i);
  }
  pre_process(n);
  for (int i = 0; i < q; i++) {
    printf("%d\n", ans[i]);
  }
  return 0;
}
void pre_process(int n) {
  for (int i = 0; i < (1 << n); i++) {
    int sum = 0;
    for (int j = 0; j < (1 << n); j++) {
      sum = get_cost(i, j, n);
      if (sum > 100) continue;
      can[i][sum] += fre[j];
    }
    sum = 0;
    for (int k = 0; k <= 100; k++) {
      sum += can[i][k];
      for (int q : query[i][k]) ans[q] = sum;
    }
  }
}
int get_cost(int a, int b, int n) {
  int sum = 0;
  for (int i = 0; i < n; i++)
    if ((a & (1 << i)) == (b & (1 << i))) sum += cost[i];
  return sum;
}
int get_decimal(char str[], int len) {
  int num = 0;
  for (int i = 0; i < len; i++)
    if (str[i] == '1') num = num | (1 << i);
  return num;
}
