#include <bits/stdc++.h>
using namespace std;
ifstream f("castel.in");
ofstream g("castel.out");
int M,N,result=0;
int T[151][151]={-1};
int nr=0;
vector<int> X,Y;
map<int,bool> K;
int Translate(int x,int y)
{
return N*(x-1)+y;
}
pair<int,int> Translate(int c)
{
return make_pair((c-1)/N+1,(c-1)%N+1);
}
void Mark(pair<int,int> P)
{
K[Translate(P.first,P.second)]=1;
T[P.first][P.second]=0;
result++;
}
void AddXY(pair<int,int> P)
{
X.push_back(P.first),Y.push_back(P.second);
Mark(P);
}
bool Check(int x,int y)
{
return(T[x][y]>0);
}
bool stop=false;
void Enter(int c)
{
vector<int> X1,Y1;
map<pair<int,int>,bool> Parsed;
int marked=0;
auto AddXY1 = [&X1,&Y1,&K,&Parsed,&marked](int x,int y,bool mark)
{
if(!Parsed[make_pair(x,y)]) X1.push_back(x),Y1.push_back(y);
if(mark) Mark(make_pair(x,y)),marked++;
};
for(uint32_t i=0;i<X.size();i++)
{
bool canDelete=0;
int x,y;
x=X[i]; y=Y[i]-1;
if(Check(x,y)) AddXY1(x,y,K[T[x][y]]);
Parsed[make_pair(x,y)]=1;
y=Y[i]+1;
if(Check(x,y)) AddXY1(x,y,K[T[x][y]]);
Parsed[make_pair(x,y)]=1;
x=X[i]-1; y=Y[i];
if(Check(x,y)) AddXY1(x,y,K[T[x][y]]);
Parsed[make_pair(x,y)]=1;
x=X[i]+1;
if(Check(x,y)) AddXY1(x,y,K[T[x][y]]);
Parsed[make_pair(x,y)]=1;
//if(!canDelete) AddXY1(x,y);
if(marked==0) stop=true;
}
X=X1,Y=Y1;
}
int main()
{
int C;
f>>M>>N>>C;
for(int i=1;i<=M;i++)
for(int j=1;j<=N;j++)
{
f>>T[i][j];
}
AddXY(Translate(C));
while(!stop) Enter(C);
g<<result;
return 0;
}