#include <stdio.h>
int N,M,D[70][70],i,j,X1,X2,Y1,Y2,ql[500],qc[500],q,nr,le1,le2,ok,l,c,x,K,p,min;
char A[70][70];
int dl[]={-1,0,+1,0};
int dc[]={0,+1,0,-1};
void pas(int xi,int yi,int xf, int yf)
{
if ((xi!=xf) || (yi!=yf))
{
if ((xf>0) && (D[xf-1][yf]==D[xf][yf]-1)) {pas(xi,yi,xf-1,yf);p*=D[xf-1][yf];nr++;}
else
if ((xf+1<N) && (D[xf+1][yf]==D[xf][yf]-1)) {pas(xi,yi,xf+1,yf);p*=D[xf+1][yf];nr++;}
else
if ((yf>0) && (D[xf][yf-1]==D[xf][yf]-1)) {pas(xi,yi,xf,yf-1);p*=D[xf][yf-1];nr++;}
else
if ((yf+1<M) && (D[xf][yf+1]==D[xf][yf]-1)) {pas(xi,yi,xf,yf+1);p*=D[xf][yf+1];nr++;}
}
}
void drum()
{
int l,c,lne,cne,k;
le1=1;
ql[1]=X1;
qc[1]=Y1;
D[X1][Y1]=0;
ql[2]=X2;
qc[2]=Y2;
le2=3;
while (le1<le2)
{
l=ql[le1];
c=qc[le1];
for (k=0;k<4;++k)
{
lne=l+dl[k];
cne=c+dc[k];
if (lne>=0 && lne<=N && cne>=0 && cne<=M)
{
if (D[lne][cne]>D[l][c]+1 && A[lne][cne]!='X')
{
D[lne][cne]=D[l][c]+1;
nr++;
ql[le2]=lne;
qc[le2++]=cne;
}
}
}
le1++;
}
}
int main()
{
freopen("kdrum.in","r",stdin);
freopen("kdrum.out","w",stdout);
scanf("%d %d %d", &N,&M,&K);
scanf("%d %d %d %d\n",&X1,&Y1,&X2,&Y2);
for (i=0;i<N;++i)
for (j=0;j<M;++j)
{
scanf("%d", &x);
if (x==0) A[i][j]='X';
else A[i][j]='.';
D[i][j]=666666;
}
X1--;
Y1--;
X2--;
Y2--;
A[X1][Y1]='.';
A[X2][Y2]='.';
drum();
if (K==1) printf("%d\n", D[X2][Y2]+1);
else
{
min=666666;
p=1;
nr=1;
pas(X1,Y1,X2,Y2);
if (p%K==0)
if (min>nr)
min=nr;
printf("%d\n",min);
}
return 0;
}