#include<bits/stdc++.h>
using namespace std;
int a[500],b[30][30],c[30][30],gx[30];
int lasttime[100000];
bool timeline[2500][2500];
bool check(int x,int y,int id){
for(int i=x;i<=y;i++)
if (timeline[id][i])
return false;
return true;
}
int main() {
int m,n,idnum,timenum,nown;
cin>>m>>n;
for(int i=1;i<=m*n;i++)
cin>>a[i];
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>b[i][j];
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>c[i][j];
for(int i=1;i<=m*n;i++){
nown=a[i];
gx[nown]++;
idnum=b[nown][gx[nown]];
timenum=c[nown][gx[nown]];
for(int t=lasttime[nown]+1;;t++)
if(check(t,t+timenum-1,idnum)){
for(int tt=t;tt<=t+timenum-1;tt++)
timeline[idnum][tt]=true;
lasttime[nown]=t+timenum-1;
break;
}
}
int maxn=0;
for(int i=1;i<=n;i++)
if(maxn<lasttime[i]) maxn=lasttime[i];
cout<<maxn;
return 0;
}