#include<iostream.h>
#include<fstream.h>
int ak[54][54],as[54][54],a[54][54],lep=1,n,m,x2,y2,ok=1,oks=1;
void nezz2 (int i,int j)
{
if ((a[i][j]!=0)&&(a[i][j]!=-1)&&(as[i][j]==0))
{
as[i][j]=lep+1;
if ((i==x2)&&(j==y2)) oks=0;
}
}
void lee (int b, int c)
{
int i,j;
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
as[i][j]=0;
as[b][c]=lep;
if ((b==x2)&&(c==y2)) oks=0;
while (oks==1)
{
for (i=1;(i<=n)&&(oks==1);i++)
for (j=1;(j<=m)&&(oks==1);j++)
if (as[i][j]==lep)
{
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);
}
lep++;
}
}
void nezz (int c, int b,int i,int j)
{
int k,l;
if ((a[i][j]!=0)&&(a[i][j]!=-1))
{
as[i][j]=lep+1;
k=ak[c][b];
b=a[i][j];
l=k;
while (b!=l)
{
if (b>l) b=b-l;
else l=l-b;
}
k=k/l;
if (k<ak[i][j])ak[i][j]=k;
if (ak[i][j]==1) {lee(i,j);ok=0;}
}
}
void kerk ()
{
int i,j;
while (ok==1)
{
for (i=1;(i<=n)&&(ok==1);i++)
for (j=1;(j<=m)&&(ok==1);j++)
if (as[i][j]==lep)
{
if (ok==1) nezz (i,j,i+1,j);
if (ok==1)nezz (i,j,i-1,j);
if (ok==1)nezz (i,j,i,j+1);
if (ok==1)nezz (i,j,i,j-1);
}
lep++;
}
}
int main()
{
int k,x1,y1,i,j,b,l;
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];
for (i=0;i<50;i++)
for (j=0;j<50;j++)
ak[i][j]=2000;
as[x1][y1]=1;
b=a[x1][y1];
l=k;
while (l!=b)
{
if (l>b) l=l-b;
else b=b-l;
}
k=k/l;
ak[x1][y1]=k;
if (ak[x1][y1]==1) lee(x1,y1);
else kerk();
g<<lep;
}