#include <bits/stdc++.h>
#define int long long
using namespace std;
const int MAXN=55;
const int MAXK=25;
int n,m,K;
int val[MAXN][MAXN];
long long f[MAXN][MAXN][MAXK][MAXK],s_row[MAXN][MAXN][MAXK],s_col[MAXN][MAXN][MAXK];
void update(long long &x,long long y)
{
	if (y>x) x=y;
}
void init()
{
	memset(val,0,sizeof(val));
	memset(s_row,0,sizeof(s_row));
	memset(s_col,0,sizeof(s_col));
	memset(f,0x80,sizeof(f));
}
signed main()
{
	int kase;scanf("%lld",&kase);
	while (kase--)
	{
		init();
		scanf("%lld%lld%lld",&n,&m,&K);
		for (int i=1;i<=n;i++)
			for (int j=1;j<=m;j++)
				scanf("%lld",&val[i][j]);
		for (int i=1;i<=n;i++)
			for (int j=1;j<=m;j++)
				for (int a=1;a<=K;a++)
					s_row[i][j][a]=max(s_row[i][j-1][a],s_row[i][j-1][a-1]+val[i][j]),
					s_col[i][j][a]=max(s_col[i-1][j][a],s_col[i-1][j][a-1]+val[i][j]);
		f[1][1][0][0]=val[1][1];f[1][1][1][0]=0;
		for (int i=1;i<=n;i++)
			for (int j=1;j<=m;j++)
				for (int a=0;a<=K;a++)
					for (int b=0;b<=K;b++)
						for (int c=0;b+c<=K;c++)
							update(f[i+1][j][a+1][b+c],f[i][j][a][b]+s_row[i+1][j-1][c]),
							update(f[i+1][j][a][b+c],f[i][j][a][b]+val[i+1][j]+s_row[i+1][j-1][c]),
							update(f[i][j+1][a+1][b+c],f[i][j][a][b]+s_col[i-1][j+1][c]),
							update(f[i][j+1][a][b+c],f[i][j][a][b]+val[i][j+1]+s_col[i-1][j+1][c]);
		long long ans=0;
		for (int i=0;i<=K;i++)
			ans=max(ans,f[n][m][i][i]);
		printf("%lld\n",ans);
	}
}
