#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
// by zrt
// problem:
// 无论你在什么时候开始,重要的是开始以后就不要停止。
using namespace std ;
typedef long long LL ;
const double eps(1e-10) ;
const int inf(0x3f3f3f3f) ;
int tt,kase;
int n,m;
int a[25],b[25];
int H[45],X[1004],P[1004],flow[1004],tot,cap[1005];
int d[45];
int S,T;
inline void add(int x,int y,int z){
P[++tot]=y;X[tot]=H[x];H[x]=tot;cap[tot]=flow[tot]=z;
}
queue<int> q;
bool bfs(){
memset(d,0,sizeof d);
d[S]=1;int x;q.push(S);
while(!q.empty()){
x=q.front();q.pop();
for(int i=H[x];i;i=X[i]){
if(flow[i]>0&&!d[P[i]]){
d[P[i]]=d[x]+1;
q.push(P[i]);
}
}
}
return d[T];
}
int dfs(int x,int a){
if(x==T||a==0) return a;
int f=a,tmp;
for(int i=H[x];i;i=X[i]){
if(flow[i]>0&&d[P[i]]==d[x]+1){
tmp=dfs(P[i],min(flow[i],a));
flow[i]-=tmp;
a-=tmp;
flow[i^1]+=tmp;
if(!a) break;
}
}
if(f==a) d[x]=-1;
return f-a;
}
int Dinic(){
int f(0);
while(bfs()) f+=dfs(S,inf);
return f;
}
int M[21][21];
int main(){
#ifdef LOCAL
freopen("in.txt","r",stdin) ;
freopen("out.txt","w",stdout) ;
#endif
scanf("%d",&tt);
while(tt--){
kase++;
S=0,T=44;
tot=1;
memset(H,0,sizeof H);
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
for(int i=1;i<=m;i++){
scanf("%d",&b[i]);
}
for(int i=n;i>1;i--){
a[i]-=a[i-1];
}
for(int i=m;i>1;i--){
b[i]-=b[i-1];
}
for(int i=1;i<=n;i++){
add(S,i,a[i]-m);
add(i,S,0);
}
for(int i=1;i<=m;i++){
add(i+20,T,b[i]-n);
add(T,i+20,0);
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
add(i,j+20,19);
add(j+20,i,0);
}
}
Dinic();
for(int i=1;i<=n;i++){
for(int j=H[i];j;j=X[j]){
if(cap[j])M[i][P[j]-20]=1+cap[j]-flow[j];
}
}
printf("Matrix %d\n",kase);
for(int i=1;i<=n;i++){
printf("%d",M[i][1]);
for(int j=2;j<=m;j++){
printf(" %d",M[i][j]);
}
puts("");
}
puts("");
}
return 0 ;
}