using namespace std;
typedef long long ll;
ll a[505][505];
int n, m;
int main(){
scanf("%d%d", &n, &m);
for (int i=1; i<=n; i++){
for (int j=1; j<=m; j++){
scanf("%lld", &a[i][j]);
}
}
ll maxx=-9999;
for (int i=1; i<=n; i++){
ll t[505];
memset(t, 0, sizeof(t));
for (int j=i; j<=n; j++){
for (int k=1; k<=m; k++){
t[k]+=a[j][k];
}
ll tmax=-9999;
for (int k=1; k<=m; k++){
if (tmax<0) tmax=0;
tmax+=t[k];
maxx=max(maxx, tmax);
}
}
}
printf("%lld", maxx);
return 0;
}
using namespace std;
typedef long long ll;
ll a[255][255];
ll n, m, k;
int main(){
scanf("%lld%lld%lld", &n, &m, &k);
for (ll i=1; i<=n; i++){
for (ll j=1; j<=m; j++){
scanf("%lld", &a[i][j]);
}
}
ll res=-1;
for (ll i=1; i<=n; i++){
ll t[505];
memset(t, 0, sizeof(t));
for (ll j=i; j<=n; j++){
for (ll v=1; v<=m; v++){
t[v]+=a[j][v];
}
ll sum=0;
int pos=1;
for (ll v=1; v<=m; v++){
sum+=t[v];
while (sum>k && pos<v){
sum-=t[pos];
pos++;
}
res=max(res, (j-i+1)*(v-pos+1));
}
}
}
printf("%d", res);
return 0;
}