#include<iostream>
using namespace std;
int order[500];
int step[30];
int machine[30];
struct note{
int num;
int time;
}W[30][30];
int X[30];
int main(){
int m,n;
cin>>m>>n;
for(int i=1;i<=m*n;i++)cin>>order[i];
for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)cin>>W[i][j].num;
for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)cin>>W[i][j].time;
for(int i=0;i<30;i++)step[i]=1;
int k=m*n;
int ans=0;
while(k>0){
ans ++;
for(int i=1;i<=m;i++){
if(machine[i]>0){
machine[i]--;
if(machine[i]==0){
step[X[i]]++;
X[i]=0;
k--;
}
}
if(machine[i]==0){
for(int j=1;j<=m*n;j++){
if(order[j]==0)continue;
if(W[order[j]][step[order[j]]].num==i){
machine[i]+=W[order[j]][step[order[j]]].time;
X[i]=order[j];
order[j]=0;
break;
}
}
}
}
}
cout<<ans-1;
return 0;
}