#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);
}
void lee(int X,int Y)
{
int i,j,ax,ay;
in=1;sf=1;
c[in].x=X;
c[in].y=Y;
drum[X][Y]=1;
while(in<=sf)
{
for(i=1;i<=4;i++)
{
ax=c[in].x+dx[i];
ay=c[in].y+dy[i];
if(a[ax][ay] && !drum[ax][ay])
{
sf++;
c[sf].x=ax;
c[sf].y=ay;
drum[ax][ay]=drum[c[in].x][c[in].y]+1;
}
}
in++;
}
}
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);
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;
if(cmc[X][Y]==k)
{
lee(X,Y);
in=sf+1;
j=5;
}
}
}
in++;
}
fprintf(g,"%d\n",drum[SF.x][SF.y]+drum[IN.x][IN.y]-1);
return 0;
}