#include <climits>
#include <iostream>
#include <vector>
using namespace std;

bool check(vector<vector<int>> &Matrica,vector<vector<int>> &Najvece,vector<vector<int>> &Najmanje,int &N,int &M){
    for(int i=0;i<N;i++){
        for(int j=0;j<M;j++){
            if((Matrica[i][j]>Najvece[i][j])||(Matrica[i][j]<Najmanje[i][j])){
                return false;
            }
        }
    }
    return true;
}
int najmanji_offset(vector<vector<int>> &Matrica,vector<vector<int>> &Najvece,int &M,int &index){
    int mini = INT_MAX;
    for(int i=0;i<M;i++){
       mini= min(Najvece[index][i]-Matrica[index][i],mini);
    }
    return mini;
}
void decrease_by(vector<vector<int>> &Matrica,int &N, int &index,int brj){
    for(int i=0;i<N;i++){
        Matrica[i][index] -= brj;
    }
}

void increase_by(vector<vector<int>> &Matrica,int &M,int &index,int broj){
    for(int i=0;i<M;i++){
        Matrica[index][i]+=broj;}
}
int largest_i(vector<int> &A,int &M){
    int index=0;
    for(int i=0;i<M;i++){
        if(A[i]>A[index]){
            index = i;
        }
    }
    return index;
}

int main()
{
    int Q,N,M;
    cin >> Q;
    for(int q=0;q<Q;q++){
        cin >> N >> M;
        vector<vector<int>> Najmanje(N),Najvece(N),Matrica(N);
        int input;
        for(int i=0;i<N;i++){
            for(int j=0;j<M;j++){
                cin >> input;
                Najmanje[i].push_back(input);
            }
        }
        for(int i=0;i<N;i++){
            for(int j=0;j<M;j++){
                cin >> input;
                Najvece[i].push_back(input);
                
            }
        }
        for(int i=0;i<N;i++){
            for(int j=0;j<M;j++){
            Matrica[i].push_back(0);}
        }
        int l_index;
        for(int i=0;i<N;i++){
            l_index = largest_i(Najvece[i],M);
            increase_by(Matrica,M,i,Najvece[i][l_index]);
            for(int j=0;j<M;j++){
                if(Najvece[i][l_index]!=Najvece[i][j]){
                    decrease_by(Matrica,N,j,Matrica[i][j] - Najvece[i][j]);
                }
            }
            
        }
        for(int i=0;i<N;i++){
            increase_by(Matrica,M,i,najmanji_offset(Matrica,Najvece,M,i));
        }
        if(check(Matrica,Najvece,Najmanje,N,M)==true){cout << "DA"<< endl;
        for(int i=0;i<N;i++){
            
            for(int j=0;j<M;j++){
                
                cout << Matrica[i][j]<< " ";
            }
            cout << endl;
        }
        }
        else{cout << "NE" << endl;}
    }
}