#include <bits/stdc++.h>
using namespace std;
int f1(vector<int> a) {
  vector<int> dp(a.size());
  int n = a.size();
  dp[0] = 1;
  int ans = 1;
  for (int i = 1; i < n; i++) {
    int mx = 0;
    for (int j = 0; j < i; j++)
      if (a[j] < a[i] && dp[j] > mx) {
        mx = dp[j];
      }
    dp[i] = mx + 1;
    ans = max(ans, dp[i]);
  }
  return ans;
}
int f2(vector<int> a) {
  vector<int> dp(a.size());
  int n = a.size();
  dp[0] = 1;
  int ans = 1;
  for (int i = 1; i < n; i++) {
    int mx = 0;
    for (int j = 0; j < i; j++)
      if (a[j] > a[i] && dp[j] > mx) {
        mx = dp[j];
      }
    dp[i] = mx + 1;
    ans = max(ans, dp[i]);
  }
  return ans;
}
vector<int> findans(int n) {
  vector<int> p;
  for (int i = 0; i < n; i++) p.push_back(i);
  vector<int> ans = p;
  do {
    if (f1(ans) + f2(ans) > f1(p) + f2(p)) ans = p;
  } while (next_permutation(p.begin(), p.end()));
  return ans;
}
void solveD(), solveC();
signed main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  solveD();
}
void solveC() {
  int n;
  cin >> n;
  int x = sqrt(n);
  while (x * x <= n) x++;
  while (x * x > n) x--;
  int st = n % x;
  if (st == 0) st = x;
  int from = 0;
  for (; st <= n; st += x) {
    for (int j = st; j > from; j--) cout << j << " ";
    from = st;
  }
}
int frombinary(string s) {
  int n = s.size();
  int ans = 0;
  for (int i = n - 1, p = 1; i >= 0; i--, p *= 2) {
    ans += (s[i] - '0') * p;
  }
  return ans;
}
int have[10000];
int cost[20];
int ans[10000][101];
int sum[10000];
void solveD() {
  int n, m, q;
  cin >> n >> m >> q;
  for (int i = 0; i < n; i++) cin >> cost[i];
  for (int i = 0; i < m; i++) {
    string s;
    cin >> s;
    int x = frombinary(s);
    have[x]++;
  }
  for (int i = 0; i < 1 << n; i++) {
    int s = 0;
    for (int k = 0; k < n; k++) {
      if (((i >> k) & 1) == 0) s += cost[n - k - 1];
    }
    sum[i] = s;
  }
  for (int i = 0; i < 1 << n; i++) {
    for (int j = 0; j < 1 << n; j++) {
      int x = sum[i ^ j];
      if (x <= 100) ans[i][x] += have[j];
    }
  }
  for (int i = 0; i < 1 << n; i++)
    for (int j = 1; j <= 100; j++) ans[i][j] += ans[i][j - 1];
  for (int i = 0; i < q; i++) {
    string s;
    cin >> s;
    int k;
    cin >> k;
    int x = frombinary(s);
    cout << ans[x][k] << '\n';
  }
}
