#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
int n,m,a[55][55],in=1,sf=1,k,d[2500],drum[55][55];
bool cmc[55][55][2500];
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 cauta(int cine,int inc,int sfa)
{
if(sfa<inc)
return sfa;
int mij=inc+(sfa-inc)/2;
if(d[mij]==cine)
return mij;
if(d[mij]<cine)
cauta(cine,mij+1,sfa);
else cauta(cine,inc,mij-1);
}
int main()
{
int i,j,q,z,X,Y,poz;
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];
z=cmmdc(a[c[1].x][c[1].y],k);
poz=cauta(z,1,d[0]);
cmc[c[in].x][c[in].y][poz]=true;
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];
if(a[X][Y])
for(i=1;i<=d[0];i++)
{
if(cmc[c[in].x][c[in].y][i])
{
z=cmmdc(d[i]*a[X][Y],k);
poz=cauta(z,1,d[0]);
if(!cmc[X][Y][poz])
{
sf++;
c[sf].x=X;
c[sf].y=Y;
cmc[X][Y][poz]=true;
drum[X][Y]=drum[c[in].x][c[in].y]+1;
}
if(cmc[SF.x][SF.y][d[0]])
fprintf(g,"%d\n",drum[SF.x][SF.y]),j=5,in=sf+1,i=d[0]+2;
}
}
}
in++;
}
return 0;
}