# include <stdio.h>
# define n 51
# define kk 12001
# define dd 100
char dx[4]={1, 0, -1, 0};
char dy[4]={0, 1, 0, -1};
int N,M,K,x1,y1,x2,y2,x;
int a[n][n],Md[n][n][dd],D[dd],ap[kk];
struct elem{
int x,y,d;
}C[n*n*dd],X;
int cmmdc(int a, int b)
{
int r;
do{
r=a%b;
a=b;b=r;
}while (r!=0);
return a;
}
int main(){
int l,c,p,u,i,j,d,k;
freopen("kdrum.in", "r", stdin);
freopen("kdrum.out", "w", stdout);
scanf("%d %d %d",&N,&M,&K);
scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
for (i=1;i<=N;i++)
for (j=1;j<=M;j++)
scanf("%ld",&a[i][j]);
for (d=1,k=0;d<=K;d++){
if (K%d==0){
D[++k]=d;
ap[d]=k;
}
}
p=u=1;
C[p].x=x1;
C[p].y=y1;
d=cmmdc(a[x1][y1],K);
C[p].d=ap[K/d];
Md[x1][y1][ap[K/d]]=1;
while (p<=u){
X=C[p];
for (i=0;i<4;i++){
l=X.x+dx[i];
c=X.y+dy[i];
if (l>=1 && l<=N && c>=1 && c<=M){
d=D[X.d]/cmmdc(a[l][c],D[X.d]);
if (Md[l][c][ap[d]]>Md[X.x][X.y][X.d]+1 || Md[l][c][d]==0){
Md[l][c][ap[d]]=Md[X.x][X.y][X.d]+1;
u++;
C[u].x=l; C[u].y=c; C[u].d=ap[d];
if (x2==l && y2==c) break;
}
}
}
p++;
}
printf("%d",Md[x2][y2][ap[1]]);
return 0;
}