#include <stdio.h>
#define nume "kdrum"
FILE *f=fopen(nume".in","r"),*g=fopen(nume".out","w");
int n,m,k,a[51][51],x1,y1,x2,y2;
int dx[]={0,0,-1,1},dy[]={-1,1,0,0};
int poz[12005],div[200],v[51][51][200];
int cmmdc(int a,int b){
int r;
while(b){
r=a%b;
a=b;
b=r;
}
return a;
}
struct ok{int x,y,z;}h[1000001];
int main(){
int i,j,d,p,q,xx,yy,x,y,z,t;
fscanf(f,"%d%d%d",&n,&m,&k);
fscanf(f,"%d%d%d%d",&x1,&y1,&x2,&y2);
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
fscanf(f,"%d",&a[i][j]);
for(i=1,d=0;i<=n;i++){
if(!k%i){
div[++d]=i;
poz[i]=d;
}
}
h[1].x=x1;
h[1].y=y1;
h[1].z=poz[cmmdc(k,a[x1][y1])];
v[x1][y1][h[1].z]=1;
printf("%d",x2);
for(p=1,q=1;p<=q;p++){
x=h[p].x,y=h[p].y,z=h[p].z;
for(i=0;i<4;i++){
xx=x+dx[i],yy=y+dy[i];
if(xx>0&&xx<=n&&yy>0&&yy<=m){
if(a[xx][yy]){
t=cmmdc(k,a[xx][yy]*div[z]);
t=poz[t];
if(v[xx][yy][t]>v[x][y][z]+1||!v[xx][yy][t]){
v[xx][yy][t]=v[x][y][z]+1;
q++;
h[q].x=xx;
h[q].y=yy;
h[q].z=t;
}
}
}
}
}
fprintf(g,"%d",v[x2][y2][d]);
fclose(f);
fclose(g);
return 0;
}