#include <stdio.h>
#include <stdlib.h>
#define DIM 55
struct coada {int x,y;} c[5*DIM];
int dx[4]={1,0,-1, 0};
int dy[4]={0,1, 0,-1};
int a[DIM][DIM],b[DIM][DIM];
int n,m,k,x1,y1,x2,y2,min=DIM*DIM*DIM;
void read ()
{
int i,j;
scanf ("%d%d%d%d%d%d%d",&n,&m,&k,&x1,&y1,&x2,&y2);
for (i=1; i<=n; ++i)
for (j=1; j<=m; ++j)
{
scanf ("%d",&a[i][j]);
if (!a[i][j])
b[i][j]=-1;
}
for (i=1; i<=n; ++i)
b[i][0]=b[i][m+1]=-1;
for (i=1; i<=m; ++i)
b[0][i]=b[n+1][i]=-1;
}
void lee (int pas,int i,int j)
{
coada t;
int in,sf,l;
in=sf=1;
c[in].x=i;
c[in].y=j;
b[i][j]=pas;
while (in<=sf)
{
t=c[in%(5*DIM)];
++in;
for (l=0; l<4; ++l)
if (b[t.x+dx[l]][t.y+dy[l]]!=-1)
{
b[t.x+dx[l]][t.y+dy[l]]=b[t.x][t.y]+1;
++sf;
c[sf%(5*DIM)].x=t.x+dx[l];
c[sf%(5*DIM)].y=t.y+dy[l];
if (t.x+dx[l]==x2 && t.y+dy[l]==y2)
{
printf ("%d",b[t.x+dx[l]][t.y+dy[l]]);
exit (0);
}
}
}
}
void back (int i,int j,int p,int pas)
{
int l;
p*=a[i][j];
if (p%k==0)
lee (pas,i,j);
else
for (l=0; l<4; ++l)
if (b[i+dx[l]][j+dy[l]]!=-1)
back (i+dx[l],j+dy[l],p,pas+1);
}
int main ()
{
freopen ("kdrum.in","r",stdin);
freopen ("kdrum.out","w",stdout);
read ();
if (k==1)
lee (1,x1,y1);
else
back (x1,y1,1,1);
return 0;
}