#include<iostream>
#include<queue>
using namespace std;
#define size 1005
int n,m,sum,start;
int map[size][size],turn[size][size];
int dir[4][2]={{0,-1},{0,1},{-1,0},{1,0}};
int sx,sy,ex,ey;
struct Node
{
int x,y;
int count;
}first,next;
int bfs()
{
int i;
queue<Node> que;
first.x=sx;
first.y=sy;
first.count=-1;
turn[first.x][first.y]=0;
que.push(first);
while(!que.empty())
{
first=que.front();
que.pop();
for(i=0;i<4;i++)
{
next.x=first.x+dir[i][0];
next.y=first.y+dir[i][1];
next.count=i;//i´ú±í·½Ïò¡£0£ºÏòÉÏ£»1£ºÏòÏ£»2£ºÏò×ó£»3£ºÏòÓÒ
if(next.count!=first.count)
sum=turn[first.x][first.y]+1;
else
sum=turn[first.x][first.y];
if(next.x<n && next.x>=0 && next.y>=0 && next.y<m && (sum<=turn[next.x][next.y] || turn[next.x][next.y]==0))
{
if(next.x==ex && next.y==ey && map[next.x][next.y]==start)
{
turn[next.x][next.y]=sum;
if(turn[next.x][next.y]<=3)
return 1;
}
if(map[next.x][next.y]==0)
{
turn[next.x][next.y]=sum;
if(turn[next.x][next.y]==4)
continue;
que.push(next);
}
}
}
}
return 0;
}
int main()
{
int i,j,ca;
while(scanf("%d%d",&n,&m)!=EOF)
{
if(n==0&&m==0)break;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
cin>>map[i][j];
cin>>ca;
for(i=0;i<ca;i++)
{
memset(turn,0,sizeof(turn));
cin>>sx>>sy>>ex>>ey;
sx-=1;sy-=1;
ex-=1;ey-=1;
start=map[sx][sy];
if(map[sx][sy]!=map[ex][ey]||map[sx][sy]==0||map[ex][ey]==0)
{
cout<<"NO"<<endl;
continue;
}
if(bfs())
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
}
return 0;
}