#include<stdio.h>
/*
*
* 二维数组形式,例如a[3][2]
* a[0][0] a[0][1]
* a[1][0] a[1][1]
* a[2][0] a[2][1]
*
*
*/
int main()
{
int s;
int a[100][100],b[100][100];
int n,k1,k2,m;
int i,j;
scanf("%d",&s);
while(s--)
{
int c[100][100] = {0};//初始化数组C[][]每一项都为0;
scanf("%d%d",&n,&k1);
for(i=0;i<n;i++)
{
for(j=0;j<k1;j++)
{
scanf("%d",&a[i][j]);//输入a[][];
}
}
scanf("%d%d",&k2,&m);
for(i=0;i<k2;i++)
{
for(j=0;j<m;j++)
{
scanf("%d",&b[i][j]);//输入b[][];
}
}
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
for(int g=0;g<k2;g++)
{
c[i][j]+=a[i][g]*b[g][j]; //三层循环,输入c[][];
}
}
}
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
printf("%d",c[i][j]);
if(j<m-1) //判断c[i][j]是否要空格
{
printf(" ");
}
}
printf("\n");
}
}
}