#include<bits/stdc++.h>
using namespace std;
int main(){
const int tmax=10000;
int m,n;
cin>>m>>n;
int steps[m*n];
for(int i=0;i<m*n;i++){
cin>>steps[i];
steps[i]--;
}
struct process{
int piece;
int step;
};
struct machine{
process work[tmax];
}mac[m];
struct workpiece{
int step;
int who[20];
int time[20];
}piece[n];
for(int i=0;i<m;i++){
for(int j=0;j<tmax;j++){
mac[i].work[j].piece=-1;
mac[i].work[j].step=0;
}
}
for(int i=0;i<n;i++){
piece[i].step=0;
for(int j=0;j<m;j++){
cin>>piece[i].who[j];
piece[i].who[j]--;
}
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>piece[i].time[j];
piece[i].time[j]--;
}
}
for(int i=0;i<m*n;i++){
workpiece piece0=piece[steps[i]];
machine mac0=mac[piece0.who[piece0.step]];
int time0=piece0.time[piece0.step];
int last=tmax-1;
if(piece0.step==0) last=0;
else{
for(;mac0.work[last].piece!=steps[i]||mac0.work[last].step!=piece0.step-1;last--){}
last++;
}
int begin=last;
for(;;begin++){
bool b=1;
for(int j=begin;j<begin+time0;j++){
if(mac0.work[j].piece!=-1){
b=0;
break;
}
}
if(b) break;
}
for(int j=begin;j<begin+time0;j++){
mac[piece0.who[piece0.step]].work[j].piece=steps[i];
mac[piece0.who[piece0.step]].work[j].step=piece0.step;
}
piece[steps[i]].step++;
}
int t=0;
for(int i=0;i<m;i++){
int t0=tmax-1;
for(;mac[i].work[t0].piece==-1;t0--){}
t0++;
t=fmax(t,t0);
}
cout<<t;
return 0;
}