#include <bits/stdc++.h>
using namespace std;
int gshi[20][20],gxu[20][20],xu[500],z[20][2],sum[20],qi[10000][20],sum1[20];
int main(){
int n,m,o=0,o1=0,maxo=0,t1=0;
cin>>m>>n;
for(int i=1;i<=n*m;i++){
cin>>xu[i];
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>gxu[i][j];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>gshi[i][j];
}
}
for(int e=1;;e++){
for(int i=1;i<=m*n;i++){
if(z[xu[i]][2]==1){
z[xu[i]][2]=0;
}
}
int t=1+t1,p=1;
for(int i=1;i<=m*n;i++){
if(xu[i]==0){
continue;
}
if(z[xu[i]][2]==1){
continue;
}
int y=0;
if(gxu[xu[i]][z[xu[i]][1]+1]==t){
for(int x=1;x<=i-1;x++){
if(xu[i]!=0){
if(gxu[xu[x]][z[xu[x]][1]+1]==gxu[xu[i]][z[xu[i]][1]+1]&&z[xu[x]][2]==0){
if(sum1[xu[x]]<=sum1[xu[i]]){
y=x;
}
}
}
}
}
if(y!=0){
i=y;
}
if(gxu[xu[i]][z[xu[i]][1]+1]==t){
z[xu[i]][1]+=1;
for(int i1=max(sum1[xu[i]]+1,sum[t]+1);i1<=max(sum1[xu[i]],sum[t])+gshi[xu[i]][z[xu[i]][1]];i1++){
qi[i1][t]=xu[i];
}
if(sum1[xu[i]]<sum[t]){
sum[t]+=gshi[xu[i]][z[xu[i]][1]];
sum1[xu[i]]=sum[t];
}
else if(sum1[xu[i]]>=sum[t]){
sum1[xu[i]]+=gshi[xu[i]][z[xu[i]][1]];
sum[t]=sum1[xu[i]];
}
o=sum[t];
maxo=max(o,maxo);
o1=max(t,o1);
z[xu[i]][2]=1;
xu[i]=0;
t++;
p=0;
t1=0;
}
}
if(p==1){
t1++;
}
int ans=0,p1=0;
for(int i=1;i<=n*m;i++){
if(xu[i]==0){
ans++;
}
if(ans==n*m){
p1=1;
break;
}
}
if(p1==1){
break;
}
}
cout<<maxo;
}