#include <bits/stdc++.h>
using namespace std;
int n, m, q;
char s[1000005];
int dx[10], dy[10], vis[205][205], mp[205][205];
int dp[205 * 205][20];
vector<int> vec;
int id(int x, int y) { return x * m + y; }
void dfs(int x, int y) {
  vis[x][y] = 1;
  int k = mp[x][y], u = id(x, y);
  int nx = x + dx[k], ny = y + dy[k];
  dp[u][k] = u;
  if (!(nx < 0 || nx >= n || ny < 0 || ny >= m)) {
    int v = id(nx, ny);
    if (!vis[nx][ny]) dfs(nx, ny);
    for (int i = 0; i < 10; i++)
      if (i != k) dp[u][i] = dp[v][i];
  }
}
bool check(char *t) {
  int len = strlen(t);
  for (int i = 0; i < (int)vec.size(); i++) {
    int u = vec[i];
    for (int j = 0; j < len; j++) {
      u = dp[u][t[j] - '0'];
      if (!~u) break;
    }
    if (~u) return 1;
  }
  return 0;
}
int main(void) {
  int i, j;
  while (~scanf("%d%d%d", &n, &m, &q)) {
    memset(dp, -1, sizeof(dp));
    vec.clear();
    for (i = 0; i < n; i++)
      for (j = 0; j < m; j++) scanf("%1d", &mp[i][j]);
    for (i = 0; i < 10; i++) scanf("%d%d", &dx[i], &dy[i]);
    memset(vis, 0, sizeof(vis));
    for (i = 0; i < n; i++) {
      for (j = 0; j < m; j++) {
        if (!vis[i][j]) {
          dfs(i, j);
          vec.push_back(id(i, j));
        }
      }
    }
    for (i = 0; i < q; i++) {
      scanf("%s", s);
      if (check(s))
        puts("YES");
      else
        puts("NO");
    }
  }
  return 0;
}
