#include<iostream>
#include<stdio.h>
FILE *f=fopen("kdrum.in","r"),*g=fopen("kdrum.out","w");
long x[]={0,0,1,-1},y[]={1,-1,0,0},x_start,y_start,x_finish,y_finish,X,Y;
long a[53][53],k,n,m,i,j,pozin,pozsf,d;
long di[130],sol[53][53][130],poz[12100];
struct {int x,y,v;} coada[53*53*130];
inline int cmmdc(long a,long b)
{
if(!b) return a;
return cmmdc(b,a%b);
}
int main()
{
fscanf(f,"%ld%ld%ld%ld%ld%ld%ld",&n,&m,&k,&x_start,&y_start,&x_finish,&y_finish);
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
fscanf(f,"%ld",&a[i][j]);
for(i=1;i<=k;i++)
if(!(k%i))
{
di[++di[0]]=i;
poz[i]=di[0];
}
pozin=pozsf=1;
coada[1].x=x_start;coada[1].y=y_start;coada[1].v=cmmdc(a[x_start][y_start],k);
sol[x_start][y_start][poz[cmmdc(a[x_start][y_start],k)]]=1;
while(pozin<=pozsf)
{
for(i=0;i<4;i++)
{
X=coada[pozin].x+x[i];
Y=coada[pozin].y+y[i];
d=cmmdc(1LL*coada[pozin].v*a[X][Y],k);
if(a[X][Y]&&!sol[X][Y][poz[d]])
{
pozsf++;
coada[pozsf].x=X;
coada[pozsf].y=Y;
coada[pozsf].v=d;
sol[X][Y][poz[d]]=sol[coada[pozin].x][coada[pozin].y][poz[coada[pozin].v]]+1;
}
}
pozin++;
}
fprintf(g,"%ld\n",sol[x_finish][y_finish][di[0]]);
return 0;
}