#include <cstdio>
#include <fstream>
using namespace std;
#define Dm 55
int Mat[Dm][Dm];
int Cmmdc[Dm][Dm][Dm];
int Cmmdc2[Dm][Dm];
int Div[Dm];
int Piv[Dm*Dm*Dm];
int N,M,K,Nbr;
#define x first
#define y second
pair<int,int> Beg,End;
int Min=Dm*Dm+1;
const int Dx[]={0,1,0,-1,0};
const int Dy[]={0,0,1,0,-1};
inline int Euclid(int A,int B)
{ int a=A; for (int b=B,c; b>0 ; c=a%b , a=b , b=c ); return a;}
#define Final ( X==End.x && Y==End.y )
#define In ( (X+Dx[i])>0 && (Y+Dy[i])>0 && (X+Dx[i])<N+1 && (Y+Dy[i])<M+1 )
#define Null ( Mat[X+Dx[i]][Y+Dy[i]]==0 )
#define True ( Val == K )
void Fill(int X,int Y,int Pas,int Val)
{
if ( Final && True )
{
if ( Pas < Min )
Min=Pas;
return;
}
if ( Pas > Min )
return;
for (int i=1;i<=4;++i)
if ( In && (!Null) )
{
int v=Mat[X][Y];
Mat[X][Y]=0;
X+=Dx[i],Y+=Dy[i];
int V=Val;
int xy=Cmmdc[Piv[K]][X][Y];
Val=(Val*xy)/Cmmdc2[Piv[xy]][Piv[Val]];
Fill(X,Y,Pas+1,Val);
Val=V;
Mat[X][Y]=v;
X-=Dx[i],Y-=Dy[i];
}
}
int main()
{
freopen("kdrum.in","r",stdin);
freopen("kdrum.out","w",stdout);
scanf("%d%d%d",&N,&M,&K);
scanf("%d%d",&Beg.x,&Beg.y);
scanf("%d%d",&End.x,&End.y);
for (int i=1;i<=N;++i)
for (int j=1;j<=M;++j)
scanf("%d",&Mat[i][j]);
for (int D=1;D<=K;++D)
Div[++Nbr]=( K%D ) ? Div[--Nbr] : D;
for (int i=1;i<=Nbr;++i)
Piv[Div[i]]=i;
for (int D=1;D<=Nbr;++D)
for (int i=1;i<=N;++i)
for (int j=1;j<=M;++j)
Cmmdc[D][i][j]=Euclid(Mat[i][j],Div[D]);
for (int D=1;D<=Nbr;++D)
for (int D2=1;D2<=Nbr;++D2)
Cmmdc2[D][D2]=Euclid(Div[D],Div[D2]);
Fill(Beg.x,Beg.y,1,Cmmdc[Piv[Mat[Beg.x][Beg.y]]][Beg.x][Beg.y]);
printf("%d\n",Min);
}