#include<cstdio>

#define rep(i,n) for(int i=0;i<(n);i++)

using namespace std;

int main(){
	for(int T=0,h,w;scanf("%d%d",&h,&w),h;T++){
		if(T>0) puts("");

		int a[100][10],type[100][10],rsum[10],csum[100];
		int rcnt[10]={},ccnt[100]={};
		rep(i,h){
			rep(j,w){
				char s[8]; scanf("%s",s);
				if(s[0]=='?'){
					type[i][j]=0;
				}
				else{
					sscanf(s,"%d",a[i]+j);
					type[i][j]=1;
					rcnt[j]++;
					ccnt[i]++;
				}
			}
			scanf("%d",csum+i);
		}
		rep(j,w) scanf("%d",rsum+j);
		scanf("%*d");

		while(1){
			bool change=false;
			rep(i,h) if(ccnt[i]==w-1) {
				int val=csum[i],jq;
				rep(j,w){
					if(type[i][j]==0) jq=j;
					else              val-=a[i][j];
				}
				a[i][jq]=val;
				type[i][jq]=2;
				rcnt[jq]++;
				ccnt[i]++;
				change=true;
			}

			rep(j,w) if(rcnt[j]==h-1) {
				int val=rsum[j],iq;
				rep(i,h){
					if(type[i][j]==0) iq=i;
					else              val-=a[i][j];
				}
				a[iq][j]=val;
				type[iq][j]=2;
				rcnt[j]++;
				ccnt[iq]++;
				change=true;
			}

			if(!change) break;
		}

		bool ok=true;
		rep(i,h) rep(j,w) if(type[i][j]==0) ok=false;
		if(!ok) puts("NO");
		else{
			rep(i,h) rep(j,w) if(type[i][j]==2) printf("%d\n",a[i][j]);
		}
	}

	return 0;
}