#include<stdio.h>
int d[2][4]={{0,1,0,-1},{1,0,-1,0}};
int q,w,nrdiv,poz[128],div[128],n,m,k,x1,x2,y1,y2,i,j,a[64][64],cst[64][64][128],c[3][250000],p,u,x,y;
int cmmdc(int a,int b){
int r;
while(b){
r=a%b;
a=b;
b=r;
}
return a;
}
int main(){
FILE *f=fopen("kdrum.in","r");
FILE *g=fopen("kdrum.out","w");
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; i<=k; i++){
if(k%i == 0){
div[++nrdiv] = i;
poz[i] = nrdiv;
}
}
p=1;
u=1;
c[0][p] = x1;
c[1][p] = y1;
c[2][p] = poz[k / cmmdc(a[x1][y1],k)];
cst[x1][y1][c[2][p]] = 1;
while(p<=u){
for(i=0; i<=3; i++){
x = c[0][p] + d[0][i];
y = c[1][p] + d[1][i];
if(x>0 && y>0 && x<=n && y<=m && a[x][y]){
q = div[ c[2][p] ] / cmmdc(div[ c[2][p] ], a[x][y]);
w = cst[ c[0][p] ][ c[1][p] ][ c[2][p] ] + 1 ;
if(cst[x][y][poz[q]] > w || !cst[x][y][poz[q]]){
cst[x][y][poz[q]] = w;
u++;
c[0][u] = x;
c[1][u] = y;
c[2][u] = poz[q];
}
}
}
p++;
}
fprintf(g,"%d",cst[x2][y2][1]);
fclose(f);
fclose(g);
return 0;
}