#include<iostream>
#include<cstdio>
using namespace std;
#define Z 100
class MinMechine
{
friend void Mechine();
private:
void Backtrack(int t);
int N; //部件个数
int M; //供应商个数
int d; //价格上限
int cw; //当前的重量
int cc; //当前花费
int bestw;//当前最小重量
int w[Z][Z]; // 部件重量
int c[Z][Z]; // 部件价格
int bestx[Z]; //最优解
int x[Z]; //当前解
public:
void Print();
};
void MinMechine::Backtrack(int t)
{//搜索t第层
int i,j;
if(t>N)//到达叶子节点
{
if(cw<bestw||x[t]==-1)
{
bestw = cw;
for(j=1;j<=N;j++)
{
bestx[j] = x[j];
}
}
return;
}
else
{
for(i=1;i<=M;i++)
{
if(cc<=d&&cw<bestw)
{
cw+=w[t][i];
cc+=c[t][i];
x[t]=i;
Backtrack(t+1);cw-=w[t][i];
cc-=c[t][i];
x[t]=-1;
}
}
}
}
void Mechine()
{
int i,j;
MinMechine m;
m.cw=0;
m.bestw=100000;
m.cc=0;
scanf("%d %d %d",&m.N,&m.M,&m.d);
for(i=1;i<=m.N;i++)
{
for(j=1;j<=m.M;j++)
{
scanf("%d",&m.c[i][j]);
}
}
for(i=1;i<=m.N;i++)
{
for(j=1;j<=m.M;j++)
{
scanf("%d",&m.w[i][j]);
}
}
for(j=1;j<=m.N;j++)
{
m.x[j]=-1;
}
m.Backtrack(1);
printf("%d\n",m.bestw);
for(i=1;i<=m.N;i++)
{
printf("%d ",m.bestx[i]);
}
}
int main()
{
Mechine();
return 0;
}