#include<stdio.h>
FILE *f=fopen("kdrum.in","r"),
*g=fopen("kdrum.out","w");
struct fs
{ int v;
int p;
int x;
int y;
} coada[2600];
int a[51][51],i,j,n,pr[350],k,prf[350],ok,p,pra[350],x,x1,x2,y1,y2,dx[4],dy[4],trec[51][51],pc,qc,m;
//void dfs(int k)
//{ for(int i=0;i<4;++i) if(a[i][j]==
//}
void bfs()
{ if(coada[pc].x==x2&&coada[pc].y==y2&&!ok) fprintf(g,"%d\n",coada[pc].p+1),ok=1;
trec[coada[pc].x][coada[pc].y]=1;
if(pc<=qc){
for(int i=0;i<4;++i) if(a[coada[pc].x+dx[i]][coada[pc].y+dy[i]]&&trec[coada[pc].x+dx[i]][coada[pc].y+dy[i]]==0) { ++qc;coada[qc].x=coada[pc].x+dx[i];
coada[qc].y=coada[pc].y+dy[i];
coada[qc].p=coada[pc].p+1;
}
++pc;
bfs();
}
}
int main()
{ fscanf(f,"%d %d %d",&n,&m,&k);
fscanf(f,"%d %d %d %d",&x1,&y1,&x2,&y2);
if(x2>x1) { dx[0]=1,dy[0]=0;
if(y2>y1) dx[1]=0,dy[1]=1,dx[2]=0,dy[2]=-1,dx[3]=-1,dy[3]=0;
else dx[1]=0,dy[1]=-1,dx[2]=0,dy[2]=1,dx[3]=-1,dy[3]=0;
}
else { dx[0]=-1,dy[0]=0;
if(y2>y1) dx[1]=0,dy[1]=1,dx[2]=0,dy[2]=-1,dx[3]=1,dy[3]=0;
else dx[1]=0,dy[1]=-1,dx[2]=0,dy[2]=1,dx[3]=1,dy[3]=0;
}
for(i=1;i<=n;++i) for(j=1;j<=m;++j) { fscanf(f,"%d",&a[i][j]);
if(a[i][j]){ a[i][j]%=k;
if(a[i][j]==0) a[i][j]=k;
}
}
coada[1].x=x1;
coada[1].y=y1;
pc=1;
qc=1;
bfs();
fclose(f);
fclose(g);
return 0;
}