#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const double eps = 1e-8;
const double PI = acos(-1.0);
const int MAXN = 1e5 + 5;
const int MAXM = 2e6 + 5;
const int MOD = 1e9 + 7;
int sgn(double x) {
  if (fabs(x) < eps) return 0;
  if (x < 0)
    return -1;
  else
    return 1;
}
long long pw(long long a, long long n, long long mod) {
  long long ret = 1;
  while (n) {
    if (n & 1) ret = ret * a % mod;
    a = a * a % mod;
    n >>= 1;
  }
  return ret;
}
long long gcd(long long a, long long b) { return b == 0 ? a : gcd(b, a % b); }
long long lcm(long long a, long long b) { return a / gcd(a, b) * b; }
void inc(long long &a, long long b) {
  a += b;
  if (a >= MOD) a -= MOD;
}
void dec(long long &a, long long b) {
  a -= b;
  if (a < 0) a += MOD;
}
int mul(int a, int b) {
  long long c = 1ll * a * b;
  return c - c / MOD * MOD;
}
int n, m, q, a[10], b[10];
int G[205][205];
char s[205];
pair<int, int> nxt[205][205][10];
bool vis[205][205];
vector<pair<int, int> > ve;
void dfs(int i, int j) {
  if (vis[i][j]) return;
  vis[i][j] = true;
  int x = i + a[G[i][j]], y = j + b[G[i][j]];
  if (x < 1 || x > n || y < 1 || y > m) {
    nxt[i][j][G[i][j]] = make_pair(i, j);
    return;
  }
  nxt[i][j][G[i][j]] = make_pair(x, y);
  dfs(x, y);
  for (int k = 0; k < 10; k++) {
    if (k != G[i][j]) nxt[i][j][k] = nxt[x][y][k];
  }
}
int len;
char str[MAXM];
bool ok(int x, int y) {
  pair<int, int> u = make_pair(x, y);
  for (int i = 0; i < len; i++) {
    int c = str[i] - '0';
    x = u.first, y = u.second;
    if (nxt[x][y][c] != make_pair(-1, -1))
      u = nxt[x][y][c];
    else
      return false;
  }
  return true;
}
void work() {
  scanf("%s", str);
  len = strlen(str);
  for (auto p : ve) {
    if (ok(p.first, p.second)) {
      puts("YES");
      return;
    }
  }
  puts("NO");
}
int main() {
  scanf("%d%d%d", &n, &m, &q);
  for (int i = 1; i < n + 1; i++) {
    scanf("%s", s + 1);
    for (int j = 1; j < m + 1; j++) {
      G[i][j] = s[j] - '0';
    }
  }
  for (int i = 0; i < 10; i++) scanf("%d%d", &a[i], &b[i]);
  for (int i = 1; i < n + 1; i++)
    for (int j = 1; j < m + 1; j++)
      for (int k = 0; k < 10; k++) {
        nxt[i][j][k] = make_pair(-1, -1);
      }
  for (int i = 1; i < n + 1; i++)
    for (int j = 1; j < m + 1; j++) {
      if (!vis[i][j]) {
        ve.push_back(make_pair(i, j));
        dfs(i, j);
      }
    }
  for (int i = 0; i < q; i++) work();
}
