#include <cstdio>
#include <list>
#define NMax 201
using namespace std;
struct Room{
int x,y,val,room;
bool viz;
} *rm[NMax*NMax],ve[NMax][NMax];
list<Room> q;
bool key[NMax*NMax],erase,ok=1;
int tot,dx[4]={-1,0,1,0},dy[4]={0,1,0,-1},start,mini,minj,camera,x,y,n,m;
void lee(int xi,int yi){
q.push_back(ve[xi][yi]);
ve[xi][yi].viz=1;
key[start]=1;
erase=0;
while(!q.empty() && ok){
ok=0;
erase=0;
for(list<Room>::iterator it=q.begin();it!=q.end();it++){
if(erase)
erase=0,it--;
if(key[it->val]){
key[it->room]=1,tot++;
erase=1,ok=1;
for(long i=0;i<4;i++){
x=it->x+dx[i];
y=it->y+dy[i];
if((1<=x && x<=n) && (1<=y && y<=m) && !ve[x][y].viz){
q.push_back(*rm[ve[x][y].room]);
ve[x][y].viz=1;
}
}
it=q.erase(it);
}
}
}
}
int main()
{
freopen("castel.in","rt",stdin);
freopen("castel.out","wt",stdout);
scanf("%ld %ld %ld",&n,&m,&start);
for(long i=1;i<=n;i++){
for(long j=1;j<=m;j++){
camera++;
scanf("%ld",&ve[i][j].val);ve[i][j].room=camera,ve[i][j].x=i,ve[i][j].y=j;
rm[camera]=&ve[i][j];
if(camera==start)
mini=i,minj=j;
}
}
lee(mini,minj);
printf("%ld",tot);
return 0;
}