#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<set>
#include<algorithm>
#include<map>
#include<vector>
#include<queue>
#include<iostream>
#include<string>
#include<cmath>
#define MaxL 5001000
#define N 2100100
#define FOR(i,a,b) for(i=(a);i<=(b);i++)
#define ROF(i,a,b) for(i=(a);i>=(b);i--)
typedef long long LL;
using namespace std;
int q[MaxL+1000],n,m,tot;bool inq[N];
int pre[4*N],w[4*N],dis[N],last[N],len=0,e[4*N];
int r1[1010][1010],r2[1010][1010],r3[1010][1010];
int g1(int x,int y)
{
  return (x-1)*(m-1)+y;
}
int g2(int x,int y)
{
  return (x-1)*(m-1)+y+tot;
}
void Add(int x,int y,int z)
{
  pre[++len]=last[x];last[x]=len;e[len]=y;w[len]=z;
  //printf("%d %d %d\n",x,y,z);
}
void adddd(int x,int y,int z)
{
  Add(x,y,z);Add(y,x,z);
}
int Nxt(int x)
{
  if (x==MaxL-1) return 1;
  return x+1;
}
void SPFA(int v0)
{
  int i;
  FOR(i,1,tot+tot+100) dis[i]=2e9;
  dis[v0]=0;
  int h=0,t=1;
  memset(inq,0,sizeof(inq));
  inq[v0]=1;q[1]=v0;
  while (h!=t)
  {
    h=Nxt(h);int u=q[h];
    for(int p=last[u];p;p=pre[p])
    {
      int v=e[p],W=w[p];
      if (dis[u]+W<dis[v])
      {
        dis[v]=dis[u]+W;
        if (!inq[v])
        {
          t=Nxt(t);
          q[t]=v;
          inq[v]=1;
        }
      }
    }
    inq[u]=0;
  }
}
void Main()
{
  int i,j;
  FOR(i,1,n)
   FOR(j,1,m-1) scanf("%d",&r1[i][j]);
  FOR(i,1,n-1) FOR(j,1,m) scanf("%d",&r2[i][j]);
  FOR(i,1,n-1) FOR(j,1,m-1) scanf("%d",&r3[i][j]);
  if (n==1) 
  {
    int Min=1e9;
    FOR(j,1,m-1) 
     if (r1[1][j]<Min) Min=r1[1][j];
    printf("%d\n",Min);return;
  }
  if (m==1)
  {
    int Min=1e9;
    FOR(j,1,n-1) 
     if (r2[j][1]<Min) Min=r2[j][1];
    printf("%d\n",Min);return;
  }
  tot=(n-1)*(m-1);
  int ns=2*tot+1,nt=2*tot+2;
  FOR(i,1,n-1) FOR(j,1,m-1)
  {
    if (j==1) Add(ns,g1(i,j),r2[i][1]);
    if (i==n-1) Add(ns,g1(i,j),r1[n][j]);
    if (i==1) Add(g2(i,j),nt,r1[1][j]);
    if (j==m-1) Add(g2(i,j),nt,r2[i][m]);
    Add(g1(i,j),g2(i,j),r3[i][j]);
    if (j<m-1) Add(g2(i,j),g1(i,j+1),r2[i][j+1]);
    if (i>1) Add(g2(i,j),g1(i-1,j),r1[i][j]);
  }
  SPFA(ns);
  printf("%d\n",dis[nt]);
}
int main()
{
  freopen("mk3.in","r",stdin);
  freopen("mk3.out","w",stdout);
  while (scanf("%d%d",&n,&m)!=EOF) Main();
}