#include <stdio.h>
#include <set>
#include <algorithm>
#define maxn 53
#define maxd 120
#define mp make_pair
using namespace std;
long f[maxn][maxn][maxd];
long v[maxn][maxn], d[maxd];
pair <long, pair<long, long> > c1[100010], c2[100010];
long n, m, i, j, k, x1, y1, x2, y2, l1, l2, x, y, rest, xc, yc, dc, ok, sol, nd, di;
const long d1[]={0, 1, 0, -1};
const long d2[]={1, 0, -1, 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("%d ", &v[i][j]);
}
}
for(i=1; i*i<=k; i++)
{
if(k%i==0)
{
nd++;
d[nd]=i;
if(i!=k/i)
{
nd++;
d[nd]=k/i;
}
}
}
sort(d+1,d+nd+1);
for(i=1; i<=nd; i++)
{
if(v[x1][y1]%d[i]==0)
{
f[x1][y1][i]=1;
l1++;
c1[l1]=mp(i, mp(x1, y1) );
}
}
ok=1;
sol=1;
while(ok)
{
sol++;
l2=0;
for(i=1; i<=l1; i++)
{
xc=c1[i].second.first;
yc=c1[i].second.second;
dc=c1[i].first;
for(j=0; j<4; j++)
{
x=xc+d1[j];
y=yc+d2[j];
if(x>0 && x<=n && y>0 && y<=m && v[x][y]!=0)
{
for(di=nd; (d[dc]*v[x][y])%d[di]!= 0; di--);
if(f[x][y][di]==0)
{
l2++;
f[x][y][di]=1;
c2[l2]=mp(di, mp(x, y) );
// printf("%d %d %d %d\n", dc, di, x, y);
if(x==x2 && y==y2 && di==nd)
{
// printf(" ! %d %d %d\n", x, y, di);
ok=0;
}
}
}
}
}
for(i=1; i<=l2; i++)
{
c1[i]=c2[i];
}
// printf("\n");
l1=l2;
}
printf("%d\n", sol);
return 0;
}