#include<bits/stdc++.h>
using namespace std;
int n,m,ans[1505][1505],k;
char mab[1505][1505];
struct node{
int x;
int y;
};
struct node A,B;
inline bool check(node s,node e){
int sx=s.x;
int sy=s.y;
int ex=e.x;
int ey=e.y;
queue<node>q;
q.push({sx,sy});
int d[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
int v[1505][1505]={};
while(!q.empty()){
node t=q.front();
q.pop();
if(t.x==ex&&t.y==ey){
return true;
}
for(int i=0;i<4;i++){
int nx=t.x+d[i][0],ny=t.y+d[i][1];
if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&v[nx][ny]==0&&mab[nx][ny]=='.'){
q.push({nx,ny});
v[nx][ny]=1;
}
}
}
return false;
}
inline bool inside(node x){
return x.x>=1&&x.x<=n&&x.y>=1&&x.y<=m;
}
inline void dfs(node a,node b){
ans[b.x][b.y]=1;
if(!ans[b.x][b.y+1]&&inside({b.x,b.y+1})&&check(a,{b.x,b.y-1})){
dfs(b,{b.x,b.y+1});
}
if(!ans[b.x][b.y-1]&&inside({b.x,b.y-1})&&check(a,{b.x,b.y+1})){
dfs(b,{b.x,b.y-1});
}
if(!ans[b.x-1][b.y]&&inside({b.x-1,b.y})&&check(a,{b.x+1,b.y})){
dfs(b,{b.x-1,b.y});
}
if(!ans[b.x+1][b.y]&&inside({b.x+1,b.y})&&check(a,{b.x-1,b.y})){
dfs(b,{b.x+1,b.y});
}
}
int main(){
cin>>n>>m>>k;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>mab[i][j];
if(mab[i][j]=='A'){
A.x=i;
A.y=j;
}
if(mab[i][j]=='B'){
B.x=i;
B.y=j;
}
}
}
dfs(A,B);
while(k--){
int x,y;
cin>>x>>y;
if(ans[x][y]){
cout<<"YES";
}else{
cout<<"NO";
}
cout<<"\n";
}
return 0;
}