#include <bits/stdc++.h>
using namespace std;
/**
_ooOoo_
o8888888o
88" . "88
(| -_- |)
O\ = /O
____/`---'\____
.' \\| |// `.
/ \\||| : |||// \
/ _||||| -:- |||||- \
| | \\\ - /// | |
| \_| ''\---/'' | |
\ .-\__ `-` ___/-. /
___`. .' /--.--\ `. . __
."" '< `.___\_<|>_/___.' >'"".
| | : `- \`.;`\ _ /`;.`/ - ` : | |
\ \ `-. \_ __\ /__ _/ .-` / /
======`-.____`-.___\_____/___.-`____.-'======
`=---='
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
佛祖保佑 每次AC
**/
const int MAXN=500,INF=1e9+10;
int ans,n,m,p,sum[MAXN],minn[MAXN],a[MAXN][MAXN],dp[MAXN][2];
void solve(int u,int v)
{
int t=0;
for (int i=u; i<=v; i++)
{
if (t<=0) t=sum[i]; else t+=sum[i];
ans=max(ans,t);
}
}
void ini(){
for (int i=1; i<=n; i++) for (int j=1; j<=m; j++) scanf("%d",&a[i][j]);
ans=-INF;
for (int l=1; l<=m; l++)
{
for (int i=1; i<=n; i++) sum[i]=0;
for (int r=l; r<=m; r++)
{
for (int i=1; i<=n; i++) sum[i]+=a[i][r];
if (l==1 && r==m) solve(1,n-1),solve(2,n); else solve(1,n);
}
}
}
void work(){
for(int l=1;l<=m;l++)
{
for(int i=1;i<=n;i++) sum[i]=0,minn[i]=INF;
for(int r=l;r<=m;r++)
{
for(int i=1; i<=n; i++) sum[i]+=a[i][r],minn[i]=min(minn[i],a[i][r]);
dp[0][0]=-INF;dp[0][1]=0;
for(int i=1;i<=n;i++){
dp[i][1]=sum[i];
dp[i][0]=sum[i]-minn[i];
dp[i][1]=max(dp[i][1],dp[i-1][1]+sum[i]);
dp[i][0]=max(dp[i][0],max(dp[i-1][1]+sum[i]-minn[i],dp[i-1][0]+sum[i]));
ans=max(ans,dp[i][0]+p);
}
}
}
}
int main()
{
while(scanf("%d%d%d",&n,&m,&p)!=-1){
ini();
work();
printf("%d\n",ans);
}
return 0;
}
using namespace std;
/**
_ooOoo_
o8888888o
88" . "88
(| -_- |)
O\ = /O
____/`---'\____
.' \\| |// `.
/ \\||| : |||// \
/ _||||| -:- |||||- \
| | \\\ - /// | |
| \_| ''\---/'' | |
\ .-\__ `-` ___/-. /
___`. .' /--.--\ `. . __
."" '< `.___\_<|>_/___.' >'"".
| | : `- \`.;`\ _ /`;.`/ - ` : | |
\ \ `-. \_ __\ /__ _/ .-` / /
======`-.____`-.___\_____/___.-`____.-'======
`=---='
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
佛祖保佑 每次AC
**/
const int MAXN=500,INF=1e9+10;
int ans,n,m,p,sum[MAXN],minn[MAXN],a[MAXN][MAXN],dp[MAXN][2];
void solve(int u,int v)
{
int t=0;
for (int i=u; i<=v; i++)
{
if (t<=0) t=sum[i]; else t+=sum[i];
ans=max(ans,t);
}
}
void ini(){
for (int i=1; i<=n; i++) for (int j=1; j<=m; j++) scanf("%d",&a[i][j]);
ans=-INF;
for (int l=1; l<=m; l++)
{
for (int i=1; i<=n; i++) sum[i]=0;
for (int r=l; r<=m; r++)
{
for (int i=1; i<=n; i++) sum[i]+=a[i][r];
if (l==1 && r==m) solve(1,n-1),solve(2,n); else solve(1,n);
}
}
}
void work(){
for(int l=1;l<=m;l++)
{
for(int i=1;i<=n;i++) sum[i]=0,minn[i]=INF;
for(int r=l;r<=m;r++)
{
for(int i=1; i<=n; i++) sum[i]+=a[i][r],minn[i]=min(minn[i],a[i][r]);
dp[0][0]=-INF;dp[0][1]=0;
for(int i=1;i<=n;i++){
dp[i][1]=sum[i];
dp[i][0]=sum[i]-minn[i];
dp[i][1]=max(dp[i][1],dp[i-1][1]+sum[i]);
dp[i][0]=max(dp[i][0],max(dp[i-1][1]+sum[i]-minn[i],dp[i-1][0]+sum[i]));
ans=max(ans,dp[i][0]+p);
}
}
}
}
int main()
{
while(scanf("%d%d%d",&n,&m,&p)!=-1){
ini();
work();
printf("%d\n",ans);
}
return 0;
}