#include<stdio.h>
#define inf 1000000000
struct queue
{
int x,y,z;
};
int n,m,k,nr,x1,y1,x2,y2,v[52][52],d[52][52][80],div[80],h[12005];
int dx[]={-1,0,1,0};
int dy[]={0,1,0,-1};
queue q[200000];
void desc()
{
int i;
for(i=1;i<=k;i++)
if(k%i==0)
div[++nr]=i;
for(i=1;i<=nr;i++)
h[div[i]]=i;
}
int cmmdc(int x, int y)
{
int r;
while(y)
{
r=x%y;
x=y;
y=r;
}
return x;
}
void bfs()
{
int p,u,i,cx,cy,cd;
p=u=1;
q[1].x=x1;
q[1].y=y1;
q[1].z=1;
d[x1][y1][1]=1;
while(p<=u)
{
for(i=0;i<=3;i++)
{
cx=q[p].x+dx[i];
cy=q[p].y+dy[i];
if(v[cx][cy])
{
cd=h[cmmdc(k,v[cx][cy]*div[q[p].z])];
if(d[q[p].x][q[p].y][q[p].z]+1<d[cx][cy][cd])
{
d[cx][cy][cd]=d[q[p].x][q[p].y][q[p].z]+1;
++u;
q[u].x=cx;
q[u].y=cy;
q[u].z=cd;
}
}
}
p++;
}
}
int main()
{
freopen("kdrum.in","r",stdin);
freopen("kdrum.out","w",stdout);
scanf("%d%d%d%d%d%d%d",&n,&m,&k,&x1,&y1,&x2,&y2);
desc();
int i,j,ii;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
scanf("%d",&v[i][j]);
for(ii=1;ii<=nr;ii++)
d[i][j][ii]=inf;
}
bfs();
printf("%d\n",d[x2][y2][nr]);
return 0;
}