#include <bits/stdc++.h>
using namespace std;
int fx[][2] = {{0, 1},  {0, -1}, {1, 1},   {1, 0}, {1, -1},
               {-1, 1}, {-1, 0}, {-1, -1}, {0, 0}},
    o = 0, n, m, q, fa[1004010], sz[1004010], tmp[1004010];
set<int> S[1004010];
char s[1010][1010];
struct tsfsd {
  int u, v;
} st[1000010];
void del() {
  assert(o > 0);
  fa[st[o].u] = st[o].u, sz[st[o].v] -= sz[st[o].u];
  o--;
}
int find(int a) { return fa[a] == a ? a : find(fa[a]); }
void merge(int u, int v, int d = 0) {
  u = find(u), v = find(v);
  if (u == v) return;
  if (sz[u] > sz[v]) swap(u, v);
  if (d) st[++o] = (tsfsd){u, v};
  fa[u] = v, sz[v] += sz[u];
}
int K, x[11], y[11], nw[11];
void work() {
  while (o) del();
  for (int i = 1; i <= K; i++) s[x[i]][y[i]] = '.';
  scanf("%d", &K);
  for (int i = 1; i <= K; i++) {
    scanf("%d%d", &x[i], &y[i]), s[x[i]][y[i]] = '#';
    for (int k = 0; k < 8; k++) {
      int xx = x[i] + fx[k][0], yy = y[i] + fx[k][1];
      if (xx < 0 || xx > n || yy < 0 || yy > m) continue;
      if (s[xx][yy] == '.') continue;
      merge(((x[i]) * (m + 1) + y[i]), ((xx) * (m + 1) + yy), 1);
    }
  }
  int u = find(((0) * (m + 1) + m)), v = find(((n) * (m + 1) + 0));
  for (int i = 1; i <= K; i++) {
    for (int k = 0; k < 9; k++) {
      int xx = x[i] + fx[k][0], yy = y[i] + fx[k][1];
      if (xx < 0 || xx > n || yy < 0 || yy > m) continue;
      int sth = find(((xx) * (m + 1) + yy)), fl = (sth == u   ? -1
                                                   : sth == v ? 1
                                                              : 0);
      if (fl == 0) continue;
      int pos = tmp[((xx) * (m + 1) + yy)];
      for (set<int>::iterator it = S[pos].begin(); it != S[pos].end(); it++) {
        sth = find(*it);
        int fl2 = (sth == u ? -1 : sth == v ? 1 : 0);
        if (fl2 == 0) continue;
        if (fl + fl2 == 0) return puts("NO"), void();
      }
    }
  }
  for (int i = 1; i <= K; i++)
    if (find(((x[i]) * (m + 1) + y[i])) == u) {
      for (int j = 1; j <= K; j++)
        if (max(abs(x[i] - x[j]), abs(y[i] - y[j])) <= 2) {
          if (find(((x[j]) * (m + 1) + y[j])) == v) return puts("NO"), void();
        }
    }
  puts("YES");
}
void dfs(int x, int y, int d, int id) {
  if (x == 1 && y == 1) return;
  if (x == n - 1 && y == m - 1) return;
  if (s[x][y] == '#') S[id].insert(tmp[((x) * (m + 1) + y)]);
  if (!d) return;
  for (int k = 0; k < 8; k++) {
    int xx = x + fx[k][0], yy = y + fx[k][1];
    if (xx < 0 || xx > n || yy < 0 || yy > m) continue;
    dfs(xx, yy, d - 1, id);
  }
}
int main() {
  scanf("%d%d%d", &n, &m, &q);
  for (int i = 1; i <= n; i++) scanf("%s", s[i] + 1);
  n++, m++;
  for (int j = 0; j <= m; j++) s[0][j] = s[n][j] = '#';
  for (int i = 0; i <= n; i++) s[i][0] = s[i][m] = '#';
  s[0][0] = s[1][0] = s[0][1] = s[n][m] = s[n - 1][m] = s[n][m - 1] = '.';
  for (int i = 0; i <= n; i++)
    for (int j = 0; j <= m; j++)
      fa[((i) * (m + 1) + j)] = ((i) * (m + 1) + j),
                          sz[((i) * (m + 1) + j)] = 1;
  for (int i = 0; i <= n; i++)
    for (int j = 0; j <= m; j++) {
      if (s[i][j] == '.') continue;
      for (int k = 0; k < 8; k++) {
        int xx = i + fx[k][0], yy = j + fx[k][1];
        if (xx < 0 || xx > n || yy < 0 || yy > m) continue;
        if (s[xx][yy] == '.') continue;
        merge(((i) * (m + 1) + j), ((xx) * (m + 1) + yy));
      }
    }
  for (int i = 0; i <= n; i++)
    for (int j = 0; j <= m; j++)
      tmp[((i) * (m + 1) + j)] = find(((i) * (m + 1) + j));
  for (int i = 0; i <= n; i++)
    for (int j = 0; j <= m; j++) dfs(i, j, 2, tmp[((i) * (m + 1) + j)]);
  while (q--) work(), fflush(stdout);
}
