#include<bits/stdc++.h>
using namespace std;
int n,m,v,g,h,mx=0x3f,mi,ni;
bool cnt[1005][1005];
struct p{
int u,k;
}a[1005][1005];
int dfs(int x,int y,int ans){
cnt[x][y]=1;
if(x==g && y==h){
ni=1;
return ans;
}
if(ans>=mx){
return 0x3f;
}
if(a[x][y].u!=x){
if(cnt[a[x][y].u][a[x][y].k]==1 && ni==0){
mi=1;
return 0x3f;
}
dfs(a[x][y].u,a[x][y].k,ans+abs((a[x][y].u-x)*v));
}
else{
if(cnt[a[x][y].u][a[x][y].k]==1 && ni==0){
mi=1;
return 0x3f;
}
dfs(a[x][y].u,a[x][y].k,ans);
}
}
int main(){
cin>>n>>m>>v>>g>>h;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j].u>>a[i][j].k;
}
}
for(int i=1;i<=m;i++){
memset(cnt,0,sizeof cnt);
mx=min(dfs(1,i,0),mx);
}
if(mi==1 && ni==0) cout<<"impossible";
else cout<<mx;
}