#include <cstdio>
#include <algorithm>
using namespace std;
#define lm 60
#define cmax 300000
#define vm 3000
int n, m, k, x1, y1, x2, y2, v[lm][lm], a[500][lm][lm], d[500], nd, w, s;
int x[cmax], y[cmax];
int v1[5]={0,0,0,1,-1};
int v2[5]={0,1,-1,0,0};
int lee()
{
int it, i, j, h, l, c, p, k, t;
for (it=1; it<=nd; it++)
{
h=1;
x[1]=x1;
y[1]=y1;
if (!(v[x1][y1]%d[it]))
a[it][x1][y1]=1;
p=1;
w=0;
t=0;
while (p<=h+t)
{
for (i=1; i<=4; i++)
{
l=x[p]+v1[i];
c=y[p]+v2[i];
if ((l>0)& (l<=n)& (c>0)& (c<=m)& (v[l][c]>0))
{
k=a[it][l][c];
if (a[it][x[p]][y[p]]!=vm)
a[it][l][c]=min(a[it][l][c], a[it][x[p]][y[p]]+1);
for (j=1; j<it; j++)
if ((!(d[it]%d[j]))& (!(v[l][c]%(d[it]/d[j])))&
(a[j][x[p]][y[p]]!=vm))
a[it][l][c]=min(a[it][l][c], a[j][x[p]][y[p]]+1);
if ((a[it][l][c]==vm)|(k!=a[it][l][c]))
{
h++;
if (h>cmax)
{
w=1;
break;
/* h=1;
t+=cmax;*/
}
x[h]=l;
y[h]=c;
}
}
}
if (w) break;
p++;
/* if (p>cmax)
{
p=1;
t-=cmax;
}*/
}
}
return a[nd][x2][y2];
}
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);
int i, j, it;
for (i=1; i<=n; i++)
for (j=1; j<=m; j++) scanf("%d",&v[i][j]);
for (i=1; i<=k; i++)
if (!(k%i))
d[1+nd++]=i;
for (it=0; it<=nd; it++)
for (i=0; i<=n; i++)
for (j=0; j<=m; j++) a[it][i][j]=vm;
s=lee();
if (w)s=-1;
printf("%d",s);
}