#include<cstdio>
#include<algorithm>
#include<bitset>
using namespace std;
#define sh short int
#define NM 105
#define OO 1<<27
sh A[NM][NM][2],C[NM][NM][4],N;
int a[NM][NM][2];
int rez,maxx=-OO;
inline int maxim(int a, int b)
{
if (a>b)return a;
return b;
}
inline void citire()
{
freopen("pixels.in","r",stdin);
freopen("pixels.out","w",stdout);
scanf("%hd",&N);
sh i,j,k;
for (i=1; i<=N; ++i)
for (j=1; j<=N; ++j)
scanf("%hd",&A[i][j][0]);
for (i=1; i<=N; ++i)
for (j=1; j<=N; ++j)
scanf("%hd",&A[i][j][1]);
for (i=1; i<=N; ++i)
for (j=1; j<=N; ++j)
for (k=0; k<=3; ++k)
scanf("%hd",&C[i][j][k]);
}
inline void stabilesc(bool ok, sh i, sh j,bool dir)
{
int maxx=-OO,r1;
bool ok1=(!ok);
r1=a[i-1][j][ok1]-(int)C[i][j][0]+a[i][j-1][ok1]-(int)C[i][j][3];
maxx=maxim(maxx,r1);
r1=a[i-1][j][ok1]-(int)C[i][j][0]+a[i][j-1][ok];
maxx=maxim(maxx,r1);
r1=a[i-1][j][ok]+a[i][j-1][ok1]-(int)C[i][j][3];
maxx=maxim(maxx,r1);
r1=a[i-1][j][ok]+a[i][j-1][ok];
maxx=maxim(maxx,r1);
a[i][j][ok]=A[i][j][ok]+maxx;
}
inline void probe(int k)
{
sh i,j;
for (i=1; i<=N; ++i)
{
for (j=1; j<=N; ++j)
printf("%d ",a[i][j][k]);
printf("\n");
}
}
inline void pixeli()
{
sh i,j,k;
for (i=1; i<=N; ++i)
{
for (j=1; j<=N; ++j)
{
stabilesc(1,i,j,0);
stabilesc(1,i,j,1);
stabilesc(0,i,j,0);
stabilesc(0,i,j,1);
}
}
printf("%d\n",maxim(a[N][N][0],a[N][N][1]));
//probe(0);
//probe(1);
}
/*inline void vad()
{
sh i,j;
for (i=1; i<=N; ++i)
for (j=1; j<=N; ++j)
{
rez+=A[i][j][a[i][j]];
if (i>1)
if (a[i][j]!=a[i-1][j])
rez-=C[i][j][0];
if (j>1)
if (a[i][j]!=a[i][j-1])
rez-=C[i][j][3];
}
int r1=rez;
if (!a[N-1][N])
r1+=C[N][N][0];
if (!a[N][N-1])
r1+=C[N][N][3];
r1-=A[N][N][0];
r1+=A[N][N][1];
rez=maxim(r1,rez);
}
inline void back(sh x, sh y)
{
if (x==N&&y==N)
{
vad();
maxx=maxim(maxx,rez);
return;
}
sh i,j;
for (i=y; i<=N; ++i)
back(x,i);
for (i=x; i<=N; ++i)
for (j=1; j<=N; ++j)
back(i,j);
a[x][y]=1;
for (i=y; i<=N; ++i)
back(x,i);
for (i=x+1; i<=N; ++i)
for (j=1; j<=N; ++j)
back(i,j);
}*/
int main()
{
citire();
pixeli();
//back(1,1);
return 0;
}