/*
一个N*M的矩阵,找出这个矩阵中所有元素的和不小于K的面积最小的子矩阵(矩阵中元素个数为矩阵面积)
*/
#include<bits/stdc++.h>
using namespace std;
int M,N,K;
int getK(vector<int>v,int K)
{
int l=0,r=0,dp=0,minans=INT_MAX,len=INT_MAX;
while(r<M)//得到最短子序列长度
{
if(dp<K){dp+=v[r];}
while(dp>=K)
{
len=min(len,r-l+1);
dp-=v[l++];
}
r++;
}
if(len==INT_MAX){return -1;}
return len;
}
int main()
{
while(cin>>M>>N>>K)
{
vector<vector<int>>vv(M,vector<int>(N,0));
for(int i=0;i<N;i++)
{
for(int j=0;j<M;j++)
{cin>>vv[i][j];}
}
//先用两重循环ij把矩阵压缩为一维
//即,如压缩后第k列数字,为i到j行第k列的和
int minar=INT_MAX;
for(int i=0;i<N;i++)
{
for(int j=i;j<N;j++)
{
vector<int>v(N,0);//压缩i到j行
for(int k=0;k<M;k++)
{
for(int h=i;h<=j;h++)
{v[k]+=vv[h][k];}
}
//压缩完毕后,求一维矩阵v的大于K的最短子序列
int ans=getK(v,K);
//cout<<ans<<" ";
if(ans==-1){continue;}
minar=min(ans*(j-i+1),minar);//行的宽度乘子序列长度就是最小面积
}
}
if(minar==INT_MAX){cout<<-1<<endl;}
else cout<<minar<<endl;
}
return 0;
}