//g++ 2.cpp -std=c++14 -O2 -I . #include using namespace std; #include using namespace atcoder; using ll = long long; using ld = long double; using vi = vector; using vvi = vector; using vll = vector; using vvll = vector; using vld = vector; using vvld = vector; using vst = vector; using vvst = vector; #define fi first #define se second #define pb push_back #define eb emplace_back #define pq_big(T) priority_queue,less> #define pq_small(T) priority_queue,greater> #define all(a) a.begin(),a.end() #define rep(i,start,end) for(ll i=start;i<(ll)(end);i++) #define per(i,start,end) for(ll i=start;i>=(ll)(end);i--) #define uniq(a) sort(all(a));a.erase(unique(all(a)),a.end()) using T = tuple; vi dx = {1,0,-1,0}; vi dy = {0,1,0,-1}; bool ok(int h,int w,int i,int j){ if(i<0||h<=i||j<0||w<=j){ return false; } return true; } int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int h,w,x,y; cin>>h>>w>>x>>y; x--;y--; vvll a(h,vll(w)),seen(h,vll(w,0)); rep(i,0,h){ rep(j,0,w){ cin>>a[i][j]; } } seen[x][y]=1; ll p=a[x][y]; pq_small(T) que; rep(d,0,4){ int ni=x+dx[d],nj=y+dy[d]; if(ok(h,w,ni,nj)){ que.push({a[ni][nj],ni,nj}); } } while(!que.empty()){ auto [enemy,i,j]=que.top(); que.pop(); if(seen[i][j]==1)continue; if(p>enemy){ seen[i][j]=1; p+=enemy; rep(d,0,4){ int ni=i+dx[d],nj=j+dy[d]; if(ok(h,w,ni,nj)&&seen[ni][nj]==0){ que.push({a[ni][nj],ni,nj}); } } } } rep(i,0,h){ rep(j,0,w){ if(seen[i][j]==0){ cout<<"No\n"; return 0; } } } cout<<"Yes\n"; }