#include <stdio.h>
struct stare{int x,y,z;}st[1000000];
int n,m,k,i,j,x1,x2,y1,y2,d,div[200],p,q,x,y,z,t,xx,yy;
int poz[12005],a[51][51],v[51][51][200];
int dx[]={-1,0,1,0},dy[]={0,1,0,-1};
int cmmdc(int a,int b){
while (a!=b)
if (a>b){a=a%b;if(!a)return b;}
else {b=b%a;if (!b)return a;}
return a;
}
int main(){
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("%d",&a[i][j]);
for (i=1,d=0;i<=k;++i)if (k%i==0){div[++d]=i;poz[i]=d;}
st[1].x=x1;st[1].y=y1;st[1].z=poz[cmmdc(k,a[x1][y1])];v[x1][y1][st[1].z]=1;
for (p=1,q=1;p<=q;p++){
x=st[p].x;y=st[p].y;z=st[p].z;
for (i=0;i<4;++i){
xx=x+dx[i]; yy=y+dy[i];
if (xx>0&&xx<=n&&yy>0&&yy<=m)
if (a[xx][yy]){
t=cmmdc(k,a[xx][yy]*div[z]);
//t=div[z]*t/cmmdc(div[z],t);
t=poz[t];
if (v[x][y][z]+1<v[xx][yy][t]||!v[xx][yy][t]){
v[xx][yy][t]=v[x][y][z]+1;
q++;
st[q].x=xx; st[q].y=yy; st[q].z=t;
}
}
}
}
printf("%d\n",v[x2][y2][d]);
return 0;
}