#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
const int maxn=21;
int m,n,ans,cnt;
int a[maxn],b[maxn][maxn],c[maxn][maxn];
int d[maxn],e[maxn],f[maxn];
bool v[maxn];
int main()
{
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];
}
}
memset(e,1,sizeof(e));
ans=m*n;
for(int i=1;;i++)
{
for(int j=1;j<=m*n;j++)
{
if(cnt==m) break;
if(d[b[a[j]][e[a[j]]]]||!a[j]||v[a[j]]) continue;
cnt++;
e[a[j]]++;
d[b[a[j]][e[a[j]]]]=c[a[j]][e[a[j]]];
f[b[a[j]][e[a[j]]]]=a[j];
v[a[j]]=true;
}
for(int j=1;j<=m;j++)
{
if(!d[j]) continue;
d[j]--;
if(!d[j])
{
cnt--;
ans--;
v[f[j]]=false;
}
}
if(!ans)
{
cout<<i<<endl;
break;
}
}
return 0;
}