#include <stdio.h>
#include <stdlib.h>
struct coada{
int l,c,v;
}c[51*51*130];
long a[51][51],k,n,m,i,j,p,u,x1,y1,x2,y2,la,ca,lv,cv,di[130],f[12001],d[51][51][130],de;
long dx[4]={-1, 0, 1, 0};
long dy[4]={0, 1, 0, -1};
long cmmdc(long a, long b)
{
long r;
do
{
r=a%b;
a=b;
b=r;
}while (r!=0)
return a;
}
int main()
{
freopen("kdrum.in","r",stdin);
freopen("kdrum.out","w",stdout);
scanf("%ld %ld %ld", &n, &m, &k);
scanf("%ld %ld %ld", &x1, &y1, &x2, &y2);
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
scanf("%ld", &a[i][j]);
for (i=1;i<=n;i++)
{
a[i][0]=-1;
a[i][n]=-1;
}
for (i=1;i<=m;i++)
{
a[0][i]=-1;
a[m][i]=-1;
}
for(i=1;i<=k;i++)
if(!(k%i))
{
di[0]++;
di[di[0]]=i;
f[i]=di[0];
}
p=u=1;
c[p].l=x1;
c[p].c=y1;
c[p].v=cmmdc(a[x1][y1],k);
d[x1][y1][f[cmmdc(a[x1][y1],k)]]=1;
while (p<=u)
{
la=c[p].l;
ca=c[p].c;
for (i=0;i<4;i++)
{
lv=la+dx[i];
cv=ca+dy[i];
de=cmmdc((c[p].v*a[lv][cv]),k);
if (a[lv][cv] && !d[lv][cv][f[de]])
{
u++;
c[u].l=lv;
c[u].c=cv;
c[u].v=de;
d[lv][cv][f[de]]=d[c[p].l][c[p].c][f[c[p].v]]+1;
if (lv==x2 && cv==y2 && d[x2][y2][di[0]])
{
printf("%ld", d[x2][y2][di[0]]);
exit(0);
}
}
}
p++;
}
return 0;
}