#include<bits/stdc++.h>
using namespace std;
int a[1000][1000]{};
struct node{
int time,w,x,y;//时间 个数 坐标
}q[1000000];
int main(){
int k=1;
int m,n,t;
cin>>m>>n>>t;
for(int i=1;i<k;++i){
for(int j=1;j<=k;++j){
cin>>a[i][j];
if(a[i][j]>0){
q[k].x=i;
q[k].y=j;
q[k].w=a[i][j];
k++;
}
}
}
//从大到小排序 在规定时间内 先摘大的 再摘小的 (题目要求;在规定时间摘最多)
for(int i=1;i<k;++i){
for(int j=i+1;j<=k;++j){
if(q[i].w<q[j].w){
swap(q[i],q[j]);
}
}
}
//计算最多能摘多少
int u=0,ans=0;
for(int i=1;i<=k;++i){
for(int j=1;j<=k;++j){
u=q[i].x+1;//返回
if(i==1){
q[i].time=q[i].x+1;
}//第一个步数(时间):路边跳到x坐标+采摘花生的时间(1)
else{
q[i].time=q[i-1].time+abs(q[i-1].x-q[i].x)+abs(q[i].y-q[i-1].y)+1;
}//步数:上一个的x坐标(要返回路边)+从路边到第i个对应的x坐标+从对应的x坐标走到第i个的y坐标+采摘花生的时间(=+1)
}
//cout<<q[i].time<<" "<<q[i].w<<" "<<u<< endl;
if(q[i].time+u<=t){//完整的步数
ans+=q[i].w;
//cout<<ans<<endl;
}// 时间合法 加上
}
cout<<ans<<endl;
}