//用递归的方式写走迷宫
#include<iostream>
using namespace std;
int sx,sy,fx,fy;
const int N=10;
int a[N][N];
int n,m;
bool visit[N][N]={false};
bool inmp(int x,int y){
if(x>=1&&x<=n&&y>=1&&y<=m) return true;
else return false;
}
//这是4个方向的偏移量 ,要是加上回溯好像就不用管是先上下左右还是下上右左了。
int dx[]={0,1,0,-1};
int dy[]={1,0,-1,0};
bool dfs(int x,int y){
if(x==fx&&y==fy) return true;//先写递归入口
visit[x][y]=true;
//递归走迷宫也没有回溯。是因为
//我想的是看看有没有路径可以出去,而不是看最短的路径
for(int i=0;i<4;++i)
{
int nx=x+dx[i];
int ny=y+dy[i];
if(!inmp(nx,ny)) continue;//因为有点点可能不合法
if(visit[nx][ny]&&a[nx][ny]==0){
dfs(nx,ny);
}//要是(x,y)
//这个点对旁边的点(nx,ny)没有障碍物并且从(nx,ny)还可以到终点,那么就返回真
}
return false;
}
int main(){
cin>>n>>m;//输入迷宫的大小
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j){
cin>>a[i][j];//现在输入迷宫的障碍情况
}
}
cin>>sx>>sy>>fx>>fy;
cout<<(dfs(sx,sy)?"yes":"no");
return 0;
}