#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=2e5,INF=1e18;
ll n,m;
ll a[N+1];
ll f[N+1];
#define ID(x,y) (((x)-1)*m+(y))
ll p[N>>1];
inline ll Read(){
char Char;
ll Number=0,Sign=1;
Char=getchar();
while(!('0'<=Char&&Char<='9')){ Sign=(Char=='-') ? -1:1; Char=getchar();}
while( '0'<=Char&&Char<='9' ){Number=Number*10+(Char-'0');Char=getchar();}
return Number*Sign;
}
int main(){
ll i,j,k;
freopen("E.in","r",stdin);
freopen("E.out","w",stdout);
n=Read();m=Read();
for(i=1,k=1;i<=n;i++)
for(j=1;j<=m;j++,k++)
a[k]=Read();
for(i=1;i<=n+m-1;i++)p[i]=Read();
for(i=1,k=1;i<=n;i++)
for(j=1;j<=m;j++,k++)
a[k]=p[i+j-1]-a[k],f[k]=INF;
f[n*m]=a[n*m];
for(i=n,k=n*m;i>=1;i--)
for(j=m;j>=1;j--,k--){
if(i<n)f[k]=min(f[k],f[ID(i+1,j)]+a[k]);
if(j<m)f[k]=min(f[k],f[ID(i,j+1)]+a[k]);
f[k]=max(0ll,f[k]);
}
printf("%lld\n",f[1]);
return 0;
}
f[ID(i,j)]:从(i,j)出发到(n,m),至少要带多少硬币