#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
int n,m,a[55][55],u[55][55],D[55][55],in=1,sf=1,nr,k,d[2500],MMM;
int dx[]={0,-1,0,1,0};
int dy[]={0,0,1,0,-1};
struct punct{
int x,y;
};
punct SF,c[55000],IN;
FILE *g=fopen("kdrum.out","w");
void afisare()
{
int i,j;
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
fprintf(g,"%d ",u[i][j]);
fprintf(g,"\n");
}
fprintf(g,"\n");
}
int cauta(int inc,int sfa)
{
if(inc>sfa)
return inc;
int mij=inc+(sfa-inc)/2;
if(d[mij]==MMM)
return mij;
if(d[mij]>MMM)
cauta(inc,mij-1);
else cauta(mij+1,sfa);
}
int cmmdc(int AA, int BB)
{
int R;
while (BB)
{
R=AA%BB;
AA=BB;
BB=R;
}
MMM=AA;
return cauta(1,nr);
}
int main()
{
int i,j,q,z,X,Y,poz,r,ok;
FILE *f=fopen("kdrum.in","r");
fscanf(f,"%d %d %d",&m,&n,&k);
fscanf(f,"%d %d",&IN.x,&IN.y);
c[1].x=IN.x;
c[1].y=IN.y;
fscanf(f,"%d %d",&SF.x,&SF.y);
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
fscanf(f,"%d",&a[i][j]);
for(i=1;i<=k;i++)
if(k%i==0)
nr++,d[nr]=i;
D[IN.x][IN.y]=1;
u[IN.x][IN.y]=cmmdc(a[IN.x][IN.y],k);
while(u[SF.x][SF.y]!=nr || !D[SF.x][SF.y])
{
for(j=1;j<=4;j++)
{
X=c[in].x+dx[j];
Y=c[in].y+dy[j];
if(a[X][Y])
{
z=cmmdc(d[u[c[in].x][c[in].y]]*a[X][Y],k);
if(z>u[X][Y])
{
u[X][Y]=z;
sf++;
c[sf].x=X;
c[sf].y=Y;
D[X][Y]=D[c[in].x][c[in].y]+1;
}
}
}
in++;
}
fprintf(g,"%d\n",D[SF.x][SF.y]);
return 0;
}