#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define oo 0x37ff777777
ll n,m,a,b,c,mmap[1010][1010],cnt,dis[1010][1010],ans1[1010][1010],ans2[1010][1010],ans3[1010][1010],mmin=0x3f3f3f3f3f3f;
ll mx[4]={0,0,-1,1};
ll my[4]={1,-1,0,0};
struct node{
ll x,y,v;
bool operator < (const node &e2)const{
return v>e2.v;
}
}point;
void djstl(ll starh,ll starz,ll dis[][1010]){
priority_queue<node> mq;
ll i;
point.x=starh;
point.y=starz;
point.v=mmap[starh][starz];
while(!mq.empty()){
node now=mq.top();
mq.pop();
for(i=0;i<4;i++){
int tx=now.x+mx[i];
int ty=now.y+my[i];
if(tx>n || tx<1 || ty>m || ty<1) continue;
if(dis[tx][ty]>now.v+mmap[tx][ty]){
dis[tx][ty]=now.v+mmap[tx][ty];
node t;
t.x=tx;
t.y=ty;
t.v=dis[tx][ty];
mq.push(t);
}
}
}
}
int main(){
ll i,j;
cin>>n>>m>>a>>b>>c;
for(i=n;i>=1;i--){
for(j=1;j<=m;j++){
cin>>mmap[i][j];
ans1[i][j]=oo;
ans2[i][j]=oo;
ans3[i][j]=oo;
dis[i][j]=mmap[i][j];
}
}
djstl(1,a,ans1);
djstl(n,b,ans2);
djstl(n,c,ans3);
for(i=n;i>=1;i--){
for(j=1;j<=m;j++){
if(ans1[i][j]+ans2[i][j]+ans3[i][j]-2*mmap[i][j]<mmin){
mmin=ans1[i][j]+ans2[i][j]+ans3[i][j]-(2*mmap[i][j]);
}
}
}
cout<<mmin;
return 0;
}