#include<iostream.h>
#include<fstream.h>
int a[5][5];
int ap[60][60],n,m,x2,y2,min=20000,oks=1,k;
void nezz2 (int i,int j)
{
if ((a[i][j]!=0)&&(a[i][j]!=-1)&&(ap[i][j]==0))
{
ap[i][j]=k+1;
if ((i==x2)&&(j==y2)) oks=0;
}
}
void lee (int b, int c, int lep)
{
int i,j;
oks=1;
for (i=0;i<n+2;i++) for (j=0;j<m+2;j++) ap[i][j]=0;
ap[b][c]=lep;
k=lep;
if ((b==x2)&&(c==y2)) oks=0;
while ((oks==1)&&(k<min))
{
for (i=1;(i<=n)&&(oks==1);i++)
for (j=1;(j<=m)&&(oks==1);j++)
if (ap[i][j]==k)
{
if (oks==1) nezz2(i+1,j);
if (oks==1) nezz2(i-1,j);
if (oks==1) nezz2(i,j+1);
if (oks==1) nezz2(i,j-1);
}
k++;
}
if (k<min) min=k;
}
void kerk (int i,int j,int lep,int k)
{
int b,l,z;
b=a[i][j];
z=a[i][j];
a[i][j]=0;
l=k;
while (b!=l)if (b>l) b=b-l;else l=l-b;
k=k/l;
if (k==1) lee (i,j,lep);
else
{
if ((a[i+1][j]!=0)&&(a[i+1][j]!=-1))kerk (i+1,j,lep+1,k);
if ((a[i-1][j]!=0)&&(a[i-1][j]!=-1))kerk (i-1,j,lep+1,k);
if ((a[i][j+1]!=0)&&(a[i][j+1]!=-1))kerk (i,j+1,lep+1,k);
if ((a[i][j-1]!=0)&&(a[i][j-1]!=-1))kerk (i,j-1,lep+1,k);
}
a[i][j]=z;
}
int main()
{
int k,x1,y1,i,j,;
fstream f,g;
f.open ("kdrum.in",ios::in);
g.open ("kdrum.out",ios::out);
f>>n>>m>>k;
f>>x1>>y1>>x2>>y2;
for (i=0;i<=n+1;i++)
for (j=0;j<=m+1;j++)
a[i][j]=-1;
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
f>>a[i][j];
if (k==1) {lee(x1,y1,0);}
else kerk(x1,y1,1,k);
g<<min;
}