#include<bits/stdc++.h>
using namespace std;
using Int = long long;
template<typename T1,typename T2> inline void chmin(T1 &a,T2 b){if(a>b) a=b;}
template<typename T1,typename T2> inline void chmax(T1 &a,T2 b){if(a<b) a=b;}

//INSERT ABOVE HERE
const int MAX = 505;
int H[MAX][MAX];
int V[MAX][MAX];
int D[MAX][MAX];

signed main(){
  int h,w,r,c;
  while(cin>>h>>w>>r>>c,h){
    memset(H,0,sizeof(H));
    memset(V,0,sizeof(V));
    for(int i=1;i<=h;i++){
      for(int j=1;j<=w+0;j++) cin>>H[i][j];
      for(int j=1;j<=w+1;j++) cin>>V[i][j];
    }
    for(int j=1;j<=w+0;j++) cin>>H[h+1][j];

    memset(D,0,sizeof(D));
    using P = pair<int, int>;
    queue<P> que;
    auto push=
      [&](int i,int j){
        if(D[i][j]) return;
        D[i][j]=1;
        que.emplace(i,j);
      };

    for(int i=1;i<=h;i++) push(i,0);
    for(int i=1;i<=h;i++) push(i,w+1);
    for(int j=1;j<=w;j++) push(0,j);
    for(int j=1;j<=w;j++) push(h+1,j);

    int dy[]={0,0,1,-1};
    int dx[]={1,-1,0,0};
    auto in=[&](int y,int x){return 1<=y&&y<=h&&1<=x&&x<=w;};

    auto check=
      [&](int ny,int nx){
        if(!in(ny,nx)) return;

        int cnt[2]={};
        cnt[H[ny+0][nx]]+=D[ny-1][nx];
        cnt[H[ny+1][nx]]+=D[ny+1][nx];
        cnt[V[ny][nx+0]]+=D[ny][nx-1];
        cnt[V[ny][nx+1]]+=D[ny][nx+1];

        if(cnt[0]&&cnt[1]) push(ny,nx);
      };

    while(!que.empty()){
      auto p=que.front();que.pop();
      int y=p.first,x=p.second;
      for(int k=0;k<4;k++){
        int ny=y+dy[k],nx=x+dx[k];
        check(ny,nx);
      }
    }

    int ans=D[r][c];
    if(r==1) ans|=H[r+0][c]==0;
    if(r==h) ans|=H[r+1][c]==0;
    if(c==1) ans|=V[r][c+0]==0;
    if(c==w) ans|=V[r][c+1]==0;

    cout<<(ans?"Yes":"No")<<endl;
  }
  return 0;
}

