#include <fstream>
#include <queue>
using namespace std;
ifstream fin("kdrum.in");
ofstream fout("kdrum.out");
queue <int> qx,qy,qval,qdrum;
int v[53][53],d[53][53],n,m,k,x1,x2,y1,y2;
void read()
{
fin>>n>>m>>k>>x1>>y1>>x2>>y2;
int i,j;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
fin>>v[i][j];
}
void baga1(int x,int y,int val)
{
if(v[x][y]==0)
{
d[x][y]=-1;
return ;
}
if(d[x][y])
return ;
d[x][y]=val;
qx.push(x);
qy.push(y);
qval.push(val);
return ;
}
void bfs1(int x,int y)
{
qx.push(x);
qy.push(y);
qval.push(1);
int a,b,val;
while(!qx.empty())
{
a=qx.front();
b=qy.front();
val=qval.front();
qx.pop();
qy.pop();
qval.pop();
baga1(a+1,b,val+1);
baga1(a-1,b,val+1);
baga1(a,b+1,val+1);
baga1(a,b-1,val+1);
}
}
void baga2(int x,int y,int val,int drum)
{
if(v[x][y]==0) return;
qx.push(x);
qy.push(y);
qval.push(val*v[x][y]);
qdrum.push(drum);
}
void bfs2(int x,int y)
{
int a,b,val,drum;
qx.push(x);
qy.push(y);
qval.push(v[x][y]);
val=qval.front();
qdrum.push(0);
while(1)
{
a=qx.front();
b=qy.front();
val=qval.front();
drum=qdrum.front();
qx.pop();
qy.pop();
qval.pop();
qdrum.pop();
if(val>=k)
{
val=val%k;
if(val==0)
{
fout<<drum+d[a][b];
return;
}
}
baga2(a+1,b,val,drum+1);
baga2(a-1,b,val,drum+1);
baga2(a,b+1,val,drum+1);
baga2(a,b-1,val,drum+1);
}
}
int main()
{
read();
bfs1(x2,y2);
bfs2(x1,y1);/*
int i,j;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
fout<<d[i][j]<<" ";
fout<<endl;
}*/
}