//varianta 1:super banala daca aceasta nu merge
//varianta 2: recursivitate
#include<stdio.h>
#include<values.h>
int x2,x1,y1,y2,n,m,mmax,k,i,j;
long a[51][51];
int msus(int x,int y,int m)
{
while(1)
{
x--;
m++;
if(x==x2 && y==y2)
if(mmax>m)
mmax=m;
if(a[x][y+1])
mdreapta(x,y,m);
if(a[x][y-1])
mstanga(x,y,m);
if(!a[x-1][y])
return 0;
}//while
}
int mjos(int x,int y,int m)
{
while(1)
{
x++;
m++;
if(x==x2 && y==y2)
if(mmax>m)
mmax=m;
if(a[x][y+1])
mdreapta(x,y,m);
if(a[x][y-1])
mstanga(x,y,m);
if(!a[x+1][y])
return 0;
}
}
int mstanga(int x,int y,int m)
{
while(1)
{
y--;
m++;
if(x==x2 && y==y2)
if(mmax>m)
mmax=m;
if(a[x-1][y])
msus(x,y,m);
if(a[x+1][y])
mjos(x,y,m);
if(!a[x][y-1])
return 0;
}
}
int mdreapta(int x,int y,int m)
{
while(1)
{
y++;
m++;
if(x==x2 && y==y2)
if(mmax>m)
mmax=m;
if(a[x-1][y])
msus(x,y,m);
if(a[x+1][y])
mjos(x,y,m);
if(!a[x][y+1])
return 0;
}
}
int main ()
{
freopen("kdrum.in","r",stdin);
freopen("kdrum.out","w",stdout);
scanf("%d%d%d",&n,&m,&k);
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
scanf("%ld",&a[i][j]);
//citire
for(i=0;i<=m+1;i++)
a[0][i]=0;
for(i=1;i<=n+1;i++)
a[i][m+1]=0;
for(i=m;i>=0;i--)
a[n+1][i]=0;
for(i=n;i>=1;i--)
a[i][0]=0;
//bordare
if(a[x1-1][y1])
msus(x1,y1,0);
if(a[x1+1][y1])
mjos(x1,y1,0);
if(a[x1][y1+1])
mdreapta(x1,y1,0);
if(a[x1][y1-1])
mstanga(x1,y1,0);
//recursivitate
return 0;
}