#include <bits/stdc++.h>
using namespace std;
const int maxn = 1005;
vector<pair<int, int> > block;
set<pair<int, int> > sav;
bool fal[maxn][maxn];
int bel[maxn][maxn], h, w, q, cnt;
bool ok(int x, int y) { return x >= 0 && y >= 0 && x <= h + 1 && y <= w + 1; }
void dfs(int x, int y) {
  if (!ok(x, y) || bel[x][y] || !fal[x][y]) return;
  bel[x][y] = cnt;
  for (int i = -1; i < 2; i++)
    for (int j = -1; j < 2; j++) dfs(x + i, y + j);
}
vector<int> imp;
int vis[maxn * maxn], fa[maxn * maxn], vistag, side_a, side_b;
void push(int u) {
  if (vis[u] == vistag) return;
  vis[u] = vistag;
  fa[u] = u;
  imp.push_back(u);
}
int get(int u) { return fa[u] == u ? u : fa[u] = get(fa[u]); }
void merge(int u, int v) {
  push(u), push(v);
  fa[get(u)] = get(v);
}
bool con(int u, int v) {
  push(u), push(v);
  return get(u) == get(v);
}
bool new_point_cut() {
  for (auto p : imp)
    if (con(p, side_a))
      for (auto q : imp)
        if (con(q, side_b))
          if (sav.find({p, q}) != sav.end()) return 1;
  return 0;
}
bool cut() {
  ++vistag;
  imp.clear();
  push(side_a), push(side_b);
  for (auto p : block) bel[p.first][p.second] = ++cnt;
  for (auto p : block)
    for (int x = p.first - 1; x < p.first + 2; x++)
      for (int y = p.second - 1; y < p.second + 2; y++)
        if (ok(x, y) && bel[x][y] && bel[x][y] != bel[p.first][p.second])
          merge(bel[x][y], bel[p.first][p.second]);
  if (new_point_cut() || con(side_a, side_b)) return 1;
  for (auto p : block)
    for (int x = p.first - 2; x < p.first + 3; x++)
      for (int y = p.second - 2; y < p.second + 3; y++)
        if (ok(x, y) && bel[x][y]) {
          int u = bel[p.first][p.second], v = bel[x][y];
          if (con(u, side_a) && con(side_b, v) ||
              con(u, side_b) && con(v, side_a))
            return 1;
        }
  return 0;
}
int main() {
  scanf("%d%d%d", &h, &w, &q);
  for (int i = 0; i <= h + 1; i++) fal[i][0] = fal[i][w + 1] = 1;
  for (int i = 1; i <= w + 1; i++) fal[0][i] = fal[h + 1][i] = 1;
  fal[0][0] = fal[0][1] = fal[1][0] = 0;
  fal[h + 1][w + 1] = fal[h + 1][w] = fal[h][w + 1] = 0;
  for (int i = 1; i <= h; i++) {
    static char s[maxn];
    scanf("%s", s + 1);
    for (int j = 1; j <= w; j++) fal[i][j] = (s[j] == '#');
  }
  for (int i = 0; i <= h + 1; i++)
    for (int j = 0; j <= w + 1; j++)
      if (fal[i][j] && !bel[i][j]) ++cnt, dfs(i, j);
  side_a = bel[0][2], side_b = bel[2][0];
  for (int i = 0; i <= h + 1; i++)
    for (int j = 0; j <= w + 1; j++)
      if (bel[i][j])
        for (int x = i - 2; x < i + 3; x++)
          for (int y = j - 2; y < j + 3; y++) {
            if (i == 0 && j == 2 && x == 2 && y == 0) continue;
            if (i == 2 && j == 0 && x == 0 && y == 2) continue;
            if (i == h - 1 && j == w + 1 && x == h + 1 && y == w - 1) continue;
            if (i == h + 1 && j == w - 1 && x == h - 1 && y == w + 1) continue;
            if (ok(x, y) && bel[x][y] && bel[x][y] != bel[i][j])
              sav.insert({bel[i][j], bel[x][y]});
          }
  for (int i = 1; i <= q; i++) {
    int c;
    scanf("%d", &c);
    block.resize(c);
    for (int j = 0; j < c; j++)
      scanf("%d%d", &block[j].first, &block[j].second);
    int pcnt = cnt;
    printf("%s\n", cut() ? "NO" : "YES");
    fflush(stdout);
    cnt = pcnt;
    for (int j = 0; j < c; j++) bel[block[j].first][block[j].second] = 0;
  }
  return 0;
}
