#include <fstream>
using namespace std;
ifstream fin("kdrum.in");
ofstream fout("kdrum.out");
short n,m,k,x1,y1,x2,y2,num,v1[12001],v2[12001];
int a[53][53];
struct structura2
{
int x,y,d,nr;
}s[999999],sol;
void citire()
{
fin>>n>>m>>k;
fin>>x1>>y1>>x2>>y2;
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++)
fin>>a[i][j];
}
short cmmdc(int a,int b)
{
int r;
if(a<b)
{
a=a+b;
b=a-b;
a=a-b;
}
while(b!=0)
{
r=a%b;
a=b;
b=r;
}
return a;
}
void div()
{
num++;
v1[1]=1;
v2[1]=1;
if(k==1) return;
for(short d=2; d<=k/2; d++)
if(k%d==0)
{
v1[d]=++num;
v2[num]=d;
}
num++;
v1[k]=num;
v2[num]=k;
}
bool egal(structura2 i,structura2 j)
{
if(i.x!=j.x) return 0;
if(i.y!=j.y) return 0;
if(i.d!=j.d) return 0;
return 1;
}
void rez()
{
int num=1,poz=1,div;
short lin,col;
s[1].x=x1;
s[1].y=y1;
s[1].d=v1[cmmdc(a[x1][y1],k)];
s[1].nr=1;
while(!egal(s[poz],sol))
{
lin=s[poz].x;
col=s[poz].y;
if(a[lin][col-1]!=0)
{
num++;
s[num].x=lin;
s[num].y=col-1;
div=cmmdc(a[lin][col-1],k);
s[num].d=v1[cmmdc(div*v2[s[poz].d],k)];
s[num].nr=s[poz].nr+1;
}
if(a[lin][col+1]!=0)
{
num++;
s[num].x=lin;
s[num].y=col+1;
div=cmmdc(a[lin][col+1],k);
s[num].d=v1[cmmdc(div*v2[s[poz].d],k)];
s[num].nr=s[poz].nr+1;
}
if(a[lin-1][col]!=0)
{
num++;
s[num].x=lin-1;
s[num].y=col;
div=cmmdc(a[lin-1][col],k);
s[num].d=v1[cmmdc(div*v2[s[poz].d],k)];
s[num].nr=s[poz].nr+1;
}
if(a[lin+1][col]!=0)
{
num++;
s[num].x=lin+1;
s[num].y=col;
div=cmmdc(a[lin+1][col],k);
s[num].d=v1[cmmdc(div*v2[s[poz].d],k)];
s[num].nr=s[poz].nr+1;
}
poz++;
}
fout<<s[poz].nr;
}
int main()
{
citire();
div();
sol.x=x2;
sol.y=y2;
sol.d=v1[k];
rez();
return 0;
}