#include<stdio.h>
struct nod{int ii,jj,tt,kk;nod *urm;};
nod *prim,*ultim,*paux;
int n,m,k,i,j,i1,j1,i2,j2,a[55][55],t2[55][55],t1[55][55],cmmdc(int mic,int mare);
void readd(),solve(),timp2(),timp1();
int main()
{
readd();
timp2();
if(k==1){printf("%d\n",t2[i1][i2]);return 0;}
timp1();
solve();
return 0;
}
void radd()
{
freopen("kdrum.in","r",stdin);
freopen("kdrum.out","w",stdout);
scanf("%d%d%d",&n,&m,&k);
scanf("%d%d%d%d",&i1,&j1,&i2,&j2);
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
scanf("%d",&a[i][j]);
if(a[i][j])
a[i][j]=cmmdc(a[i][j],k);
}
}
int cmmdc(int mare,int mic)
{
int rest;
while(mic){rest=mare%mic;mare=mic;mic=rest;}
return mare;
}
void solve(){}
void timp2()
{ int ic,jc,tc,in,jn,tn;
prim=new nod;
prim->tt=1;
prim->ii=i2;
prim->jj=j2;
prim->urm=0;
ultim=prim;
for(i=0;i<=n+1;i++)t2[i][0]=t2[i][m+1]=1;
for(j=0;j<=m+1;j++)t2[0][j]=t2[n+1][j]=1;
while(prim)
{
ic=prim->ii;
jc=prim->jj;
tc=prim->tt;
in=ic+1;jn=jc;tn=tc+1;
if(!t2[in][jn])
{
t2[in][jn]=tn;
paux=new nod;
paux->ii=in;
paux->jj=jn;
paux->tt=tn;
paux->urm=0;
ultim->urm=paux;
ultim=paux;
}
in=ic-1;jn=jc;
if(a[in][jn]&&!t2[in][jn])
{
t2[in][jn]=tn;
paux=new nod;
paux->ii=in;
paux->jj=jn;
paux->tt=tn;
paux->urm=0;
ultim->urm=paux;
ultim=paux;
}
in=ic;jn=jc+1;
if(a[in][jn]&&!t2[in][jn])
{
t2[in][jn]=tn;
paux=new nod;
paux->ii=in;
paux->jj=jn;
paux->tt=tn;
paux->urm=0;
ultim->urm=paux;
ultim=paux;
}
in=ic;jn=jc-1;
if(a[in][jn]&&!t2[in][jn])
{
t2[in][jn]=tn;
paux=new nod;
paux->ii=in;
paux->jj=jn;
paux->tt=tn;
paux->urm=0;
ultim->urm=paux;
ultim=paux;
}
}
}
void timp1(){};
/*{
prim=new nod;
*/