#include<stdio.h>
FILE *f=fopen("kdrum.in","r");
FILE *g=fopen("kdrum.out","w");
int y[100][2];
int t[52][52][2]={0};
struct ww
{
int ok;
int bi;
int ji;
int xx;
int yy;
ww()
{
bi=-1;
ji=-1;
}
}
u[2500];
int n,m,k,x1,y1,x2,y2;
int e=1;
int min=65000;
//void bontas(int &k, int h)
//void keres(int &p);
void insert( int a , int i , int x , int y );
int lee( int x , int y , int nr , int k );
//int bont(int n);
int main()
{
int i,j;
fscanf(f,"%d%d%d%d%d%d%d",&n,&m,&k,&x1,&y1,&x2,&y2);
for(i=0;i<=n+1;i++)
for(j=0;j<=m+1;j++)
if(i==0||i==n+1||j==0||j==m+1)t[i][j][1]=-1;
else fscanf(f,"%d",&t[i][j][0]);
t[1][1][1]=1;
if( t[x1-1][ y1 ][1]==0 && t[x1-1][ y1 ][0]!=0 )lee(x1-1, y1 ,2,k);
if( t[x1+1][ y1 ][1]==0 && t[x1+1][ y1 ][0]!=0 )lee(x1+1, y1 ,2,k);
if( t[ x1 ][y1-1][1]==0 && t[ x1 ][y1-1][0]!=0 )lee( x1 ,y1-1,2,k);
if( t[ x1 ][y1+1][1]==0 && t[ x1 ][y1+1][0]!=0 )lee( x1 ,y1+1,2,k);
fprintf(g,"%d",min);
fclose(f);
fclose(g);
return 0;
}
int lee( int x , int y , int nr , int k)
{
t[x][y][1]=nr;
//if(k>1)insert(t[x][y][0],0,x,y);
if(k%t[x][y][0]==0)k/=t[x][y][0];
//else bontas(k,t[x][y][0]);
if(x==x2&&y==y2)
{
if(k==1&&min>nr)
{
min=nr;
return 0;
}
/*
else
{
p=k;
d=0;
while(p!=1)
{
p/=bont(p);
d++;
if(p!=1)
keres(p);
}
}*/
}
else
{
if( (t[x-1][ y ][1]==0||t[x-1][ y ][1]>nr) &&(t[x-1][ y ][0]!=0)) lee(x-1, y ,nr+1,k);
if( (t[x+1][ y ][1]==0||t[x+1][ y ][1]>nr) &&(t[x+1][ y ][0]!=0)) lee(x+1, y ,nr+1,k);
if( (t[ x ][y-1][1]==0||t[ x ][y-1][1]>nr) &&(t[ x ][ y-1 ][0]!=0))lee( x ,y-1,nr+1,k);
if( (t[ x ][y+1][1]==0||t[ x ][y+1][1]>nr) &&(t[ x ][ y+1 ][0]!=0))lee( x ,y+1,nr+1,k);
t[x][y][1]=0;
}
return 0;
}
void insert( int a , int i , int x , int y )
{
if(a<u[i].ok)
{
if(u[i].bi==-1)
{
u[e].ok=a;
u[i].bi=e;
u[e].xx=x;
u[e].yy=y;
e++;
}
else insert(a,u[i].bi,x,y);
}
if(u[i].ok<=a)
{
if(u[i].ji==-1)
{
u[e].ok=a;
u[i].ji=e;
u[e].xx=x;
u[e].yy=y;
e++;
}
else insert(a,u[i].ji,x,y);
}
}
/*
int bont(int n)
{
for(i=2;i<sqrt(n);i++)
if(n%i==0)
return n/i;
return n;
}
int keres( int a , int i )
{
if(u[i].ok==a)return i;
if(a<u[i].ok)
{
if(u[i].bi==-1)return -1;
else return keres(a,u[i].bi);
}
else
{
if(u[i].ji==-1)return -1;
else return keres(a,u[i].ji);
}
return -1;
}
void bontas(int &k, int h)
{
for(int i=2;i<k/2;i++)
{
while(k%i==0&&h%i==0)
{
k/=i;
h/=i;
}
}
}
*/