#include<stdio.h>
const int dx[]={0,0,-1,1},
dy[]={-1,1,0,0};
int q,w,nrdiv,poz[12800],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;
}
void citire()
{
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("%d",&a[i][j]);
}
void initi()
{
for (i=1; i<=k; i++)
{ if (k%i == 0)
{
div[++nrdiv] = i;
poz[i] = nrdiv;
}
}
}
void lee()
{
int li,lf=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;
for(li;li<=lf;li++)
{
for (i=0; i<4; i++)
{
x = c[0][li] + dx[i];
y = c[1][li] + dy[i];
if(x<1||x>n) continue;
if(y<1||y>m) continue;
if(!a[x][y]) continue;
q = div[ c[2][li] ] / cmmdc(div[ c[2][li] ], a[x][y]);
w = cst[ c[0][li] ][ c[1][li] ][ c[2][li] ] + 1 ;
if (cst[x][y][poz[q]] > w || !cst[x][y][poz[q]])
{
cst[x][y][poz[q]] = w;
lf++;
c[0][lf] = x;
c[1][lf] = y;
c[2][lf] = poz[q];
}
}
}
}
int main()
{
freopen("kdrum.in","r",stdin);
freopen("kdrum.out","w",stdin);
citire();
initi();
lee();
printf("%d",cst[x2][y2][1]);
return 0;
}