#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
int n,m,a[55][55],in=1,sf=1,k,d[2500],cmc[55][55],drum[55][55];
int dx[]={0,-1,0,1,0};
int dy[]={0,0,1,0,-1};
struct punct{
int x,y;
};
punct SF,c[55000],IN;
int cmmdc(int q,int w)
{
if(q<w)
{
int aux=q;
q=w;
w=aux;
}
if(q==0 || w==0)
return max(q,w);
if(w==1 || q==1)
return 1;
q%=w;
cmmdc(q,w);
}
int main()
{
int i,j,q,z,X,Y;
FILE *f=fopen("kdrum.in","r");
FILE *g=fopen("kdrum.out","w");
fscanf(f,"%d %d %d",&m,&n,&k);
fscanf(f,"%d %d",&IN.x,&IN.y);
c[1].x=IN.x;
c[1].y=IN.y;
fscanf(f,"%d %d",&SF.x,&SF.y);
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
fscanf(f,"%d",&a[i][j]);
j=sqrt(k);
for(i=1;i<=j;i++)
{
if(k%i==0)
d[0]++,d[d[0]]=i;
}
q=d[0];
if(k/j!=sqrt(k))
d[0]++,d[d[0]]=i;
for(i=q-1;i>=1;i--)
d[0]++,d[d[0]]=k/d[i];
cmc[c[in].x][c[in].y]=cmmdc(a[c[1].x][c[1].y],k);
drum[IN.x][IN.y]=1;
while(in<=sf)
{
for(j=1;j<=4;j++)
{
X=c[in].x+dx[j];
Y=c[in].y+dy[j];
z=cmmdc(cmc[c[in].x][c[in].y]*a[X][Y],k);
if(a[X][Y]!=0 && cmc[X][Y]<z)
{
sf++;
c[sf].x=X;
c[sf].y=Y;
cmc[X][Y]=z;
drum[X][Y]=drum[c[in].x][c[in].y]+1;
}
if(cmc[SF.x][SF.y]==k)
fprintf(g,"%d\n",drum[SF.x][SF.y]),j=5,in=sf+1;
}
in++;
}
return 0;
}