#include<stdio.h>
struct nod{int inf; nod*urm;} *cod[23000], *P;
int v[155][155],a[155][155],d[23000],viz[23000],i,j,k,l,p,q,c,m,n,L,C,x;
int dl[]={0,0,1,0,-1},dc[]={0,1,0,-1,0};
void ntoc(int x,int &l,int &c){
if(x%m==0){c=m;l=x/m;}
else
{c=x%m;l=x/m+1;}
}
int cton(int l,int c){
return (l-1)*m+c;
}
void solve(int x){
nod *p;
for(p=cod[x];p;p=p->urm)
{d[++q]=p->inf;
viz[p->inf]=1;
if(cod[p->inf])solve(p->inf);
}
cod[x]=NULL;
}
void add(int x,int val){
nod *p=new nod;
p->inf=val;
p->urm=cod[x];
cod[x]=p;
}
int main(){
freopen("castel.in","r",stdin);
freopen("castel.out","w",stdout);
scanf("%d %d %d",&n,&m,&k);
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
scanf("%d",&v[i][j]);
viz[k]=1;
ntoc(k,L,C);
d[1]=k;
a[L][C]=1;
p=q=1;
for(i=1;i<=m;i++)
a[0][i]=a[n+1][i]=1;
for(i=1;i<=n+1;i++)
a[i][0]=a[i][m+1]=1;
while(p<=q){
ntoc(d[p],l,c);
for(i=1;i<=4;i++){
L=l+dl[i];
C=c+dc[i];
x=cton(L,C);
if(!a[L][C])
if(viz[v[L][C]]){
a[L][C]=1;
viz[x]=1;
d[++q]=x;
if(cod[x])solve(x);
}
else
{add(v[L][C],x);a[L][C]=1;}
}
p++;}
printf("%d",q);
return 0;}