#include<bits/stdc++.h>
#define int long long
using namespace std;
int p[500010];
int sum[500010];
signed main(){
int h,w;
cin>>h>>w;
int a[h+10][w+10],dp[h+10][w+10],g[h+10][w+10];
for(int i=1;i<=h;i++){
for(int j=1;j<=w;j++){
cin>>a[i][j];
}
}
for(int i=1;i<=h+w-1;i++){
cin>>p[i];
}
for(int i=0;i<=h;i++){
for(int j=0;j<=w;j++){
dp[i][j]=0;
g[i][j]=0;
}
}
sum[0]=0;
for(int i=1;i<=h+w-1;i++){
sum[i]=sum[i-1]+p[i-1];
}
dp[1][1]=p[1]-a[1][1];
g[1][1]=a[1][1];
if(h==1 && w==1){
cout<<max(0ll,dp[1][1]);
return 0;
}
for(int i=1;i<=h;i++){
for(int j=1;j<=w;j++){
if(i==1 && j==1)continue;
int m1=1e18,s1=-1;
int m2=1e18,s2=-1;
int k=i+j-1;
if(j>1){
int a1=g[i][j-1]+a[i][j];
int c=p[k]+sum[k]-a1;
int ma=max(dp[i][j-1],c);
m1=ma;
s1=a1;
}
if(i>1){
int a1=g[i-1][j]+a[i][j];
int c=p[k]+sum[k]-a1;
int ma=max(dp[i-1][j],c);
m2=ma;
s2=a1;
}
if(i>1 && j>1){
if(m1<m2){
dp[i][j]=m1;
g[i][j]=s1;
}
else if(m2<m1){
dp[i][j]=m2;
g[i][j]=s2;
}
else{
dp[i][j]=m1;
g[i][j]=max(s1,s2);
}
}
else if(j>1){
dp[i][j]=m1;
g[i][j]=s1;
}
else if(i>1){
dp[i][j]=m2;
g[i][j]=s2;
}
}
}
int ans=dp[h][w];
ans=max(ans,0ll);
cout<<ans<<endl;
return 0;
}