#include <cstdio>
#include <queue>
#include <set>
#include <bitset>
using namespace std;
queue <int> Q;
set <int> v[22505];
set <int> ::iterator it;
int a[155][155],cc,ll;
int dx[]= {-1,0,1,0},
dy[]= {0,1,0,-1};
bitset <22505> f;
inline int conv1(int l,int c,int m) {
return (l-1)*m+c;
}
inline void conv2(int k,int n,int m) {
ll=k/m+(k%m!=0);
cc=k%m+(k%m==0?m:0);
}
int main() {
freopen("castel.in","r",stdin);
freopen("castel.out","w",stdout);
int n,m,k,aux,new_x,new_y,l,c,Size,temp;
scanf("%d%d%d",&n,&m,&k);
for(int i=1; i<=n; ++i) {
for(int j=1; j<=m; ++j) {
scanf("%d",&a[i][j]);
}
}
Q.push(k);
while(!Q.empty()) {
aux=Q.front();
conv2(aux,n,m);
f[aux]=1;
//printf("%d ",aux);
for(int i=0; i<4; ++i) {
new_x=dx[i]+ll;
new_y=dy[i]+cc;
if(a[new_x][new_y]!=0 && f[conv1(new_x, new_y, m)] == 0) {
if(v[aux].size()!=0) {
//Size=v[aux].size();
Size=n*m;
for(int j=1; j<=Size; ++j) {
it=v[aux].find(j);
if(it!=v[aux].end()) {
f[*it]=1;
Q.push(*it);
v[aux].erase(it);
}
}
}
temp=conv1(new_x,new_y,m);
if(f[a[new_x][new_y]]==1) {
Q.push(temp);
f[temp]=1;
} else {
v[a[new_x][new_y]].insert(temp);
}
}
}
Q.pop();
}
printf("%d",f.count());
/*for(int i=0; i<=12; ++i) {
if(f.test(i)) {
printf("1 ");
} else
printf("0 ");
}*/
return 0;
}