#include #define FOR(i,a,b) for (int i=(a);i<(b);i++) #define FORR(i,a,b) for (int i=(a);i>=(b);i--) #define pb push_back #define pcnt __builtin_popcount #define show(x) cout<<#x<<" = "< pii; typedef vector vi; typedef vector vvi; typedef vector vpii; typedef set si; typedef pair pll; typedef vector vl; typedef vector vvl; typedef vector vpll; typedef set sl; templatestring join(vector&v) {stringstream s;FOR(i,0,sz(v))s<<' '<b)swap(a,b);for(;a>0;b%=a,swap(a,b));return b;} int modpow(ll a,ll n,int m){if(a==0)return a;ll p=1;for(;n>0;n/=2,a=a*a%m)if(n&1)p=p*a%m;return (int)p;} const int iinf = 1e9; const ll linf = 4e18; const int mod = 1e9+7; const double eps = 1e-10; struct Dijk{ // solve(s, g) or solve(s). // show d and p. typedef pair pli; int n; vectorE; vl d; vi p; void init(const vector&e){n=sz(e);E=e;FOR(i,0,n)sort(rng(E[i]));d.resize(n);p.resize(n);} void o(int S,int G){FOR(i,0,n){d[i]=(i==S)?0:linf;p[i]=-1;}priority_queue,greater>Q;Q.push(pll(0,S));pli t;vectorF;FOR(i,0,n)F.pb(0);ll f;int c=0,s;while(!Q.empty()){t=Q.top();Q.pop();f=t.fi;s=t.se;if(F[s])continue;F[s]=1;c++;if(c==n||s==G)break;each(itr,E[s]){ll ff=itr->fi,ss=itr->se;if((!F[ff])&&(f+ssse;p[ff]=s;Q.push(pll(f+ss,ff));}}}} ll solve(int s,int g){o(s,g);return d[g];} void solve(int s){o(s,-1);} }; int n, v, x[2], L[200][200]; vector E; main(){ cin.tie(0); ios::sync_with_stdio(false); cin >> n >> v >> x[0] >> x[1]; x[0]--; x[1]--; int o = x[1]*200 + x[0]; E.resize(40000); FOR(i, 0, n)FOR(j, 0, n)cin >> L[j][i]; FOR(_y, 0, n)FOR(_x, 0, n){ int __x, __y, id = _y*200+_x; if(_x>0){ __x = _x - 1; __y = _y; E[id].pb(pll(__y*200+__x, L[__x][__y])); } if(_y>0){ __x = _x; __y = _y - 1; E[id].pb(pll(__y*200+__x, L[__x][__y])); } if(_x= 0) d2 = 2 * dij.solve(0, o) + dij.solve(o, (n-1)*201); cout << ((d1 < v || d2 < v * 2) ? "YES" : "NO") << endl; }