#include<cstdio>
#include<cstring>
#include<queue>
#include<vector>
using namespace std;
#define INF 100000
#define pii pair<pair<int,int>,int>
struct comp {
    bool operator() (const pii &a, const pii &b) {
        return a.second > b.second;
    }
};
int dx[]={-1,1,0,0};
int dy[]={0,0,-1,1};
int n,m;
int cost[110][110];
bool isvalid(int x,int y) {
	if(x < 0 || y<0 || x> n-1 || y > m-1)
	return false;
	return true;
}
void dijakstra(int destx,int desty,int total_time) {
	priority_queue < pii, vector<pii> , comp> que;
	int d[110][110];
	int state[110][110];
	memset(d,INF,sizeof(d));
	memset(state,0,sizeof(state));
	d[0][0]=0;
	que.push(make_pair(make_pair(0,0),cost[0][0]));
	state[0][0]=1;	
	while(!que.empty()) {
    	int xc=que.top().first.first;
	int yc=que.top().first.second;
	int w=que.top().second;
//		printf("%d %d %d\n",xc,yc,w);
		if(xc==destx && yc==desty) {
			break;
		}
		que.pop();
		for(int j=0;j<4;j++) {
			int x1=xc+dx[j];
			int x2=yc+dy[j];
			if(isvalid(x1,x2) && !state[x1][x2] && (w+cost[x1][x2])<=total_time)
			{
				d[x1][x2]=w+cost[x1][x2];
				state[x1][x2]=1;
				que.push(make_pair(make_pair(x1,x2),d[x1][x2]));
			}
		}
	}
	if(state[destx][desty]==0)
	printf("NO\n");
	else
	{
		printf("YES\n");
//		printf("%d %d\n",total_time,d[destx][desty]);
		printf("%d\n",(total_time-d[destx][desty]));
	}
}
int main() {
	int i,j,a,b,c,t;
//	freopen("in1.txt","r",stdin);
	scanf("%d",&t);
	while(t--) {
		scanf("%d%d",&n,&m);
		for(i=0;i<n;i++) {
			for(j=0;j<m;j++) {
				scanf("%d",&cost[i][j]);
			}
		}
		int destx,desty,tc;
		scanf("%d%d%d",&destx,&desty,&tc);
		dijakstra(destx-1,desty-1,tc);
	}
	return 0;
}

sir plz check my code i can't understand why i am getting WA.
Thanks