#include using namespace std; const int inf = 1e9; int main() { int H, W, sx, sy, Q, gx, gy, T; cin >> H >> W >> sx >> sy; sx--; sy--; vector S(H); for (int i = 0; i < H; i++) { cin >> S[i]; } vector> dxy = {{-1, -1}, {-1, 0}, {-1, 1}, {0, -1}}; vector> P(H * W, vector(4)); vector>> nxt(H * W, vector>(4)); for (int i = 0; i < 4; i++) { for (int j = 0; j < H; j++) { for (int k = 0; k < W; k++) { int nj = j + dxy[i].first, nk = k + dxy[i].second; if (!(0 <= nj && nj < H && 0 <= nk && nk < W) || S[nj][nk] == '#') { int nx = j, ny = k; while (0 <= nx && nx < H && 0 <= ny && ny < W && S[nx][ny] == '.') { P[nx * W + ny][i] = j * W + k; nxt[j * W + k][i].push_back(nx * W + ny); nx -= dxy[i].first; ny -= dxy[i].second; } } } } } vector dist(5 * H * W, inf); dist[sx * W + sy] = 0; deque q; q.push_back(sx * W + sy); while (!q.empty()) { auto u = q.front(); q.pop_front(); if (u >= H * W) { int r = u / (H * W) - 1; for (int nx: nxt[u - H * W * (r + 1)][r]) { if (dist[nx] == inf) { dist[nx] = dist[u] + 1; q.push_back(nx); } } } else { for (int d = 0; d < 4; d++) { int t = P[u][d] + H * W * (d + 1); if (dist[t] == inf) { dist[t] = dist[u]; q.push_front(t); } } } } cin >> Q; while (Q--) { cin >> gx >> gy >> T; gx--; gy--; if (dist[gx * W + gy] < inf && dist[gx * W + gy] <= T) { cout << "Yes\n"; } else { cout << "No\n"; } } }