#include<iostream>
using namespace std;
int state[20][1000000] = { 0 };
int m, n, order[401], step[20] = { 0 }, last_time[21] = { 0 };
int main()
{
cin >> m >> n;
struct info
{
int id;
int cost;
}a[20][20];
for (int i = 0;i < m * n;i++)
cin >> order[i];
for (int i = 1;i < n+1;i++)
for (int j = 0;j < m;j++)
cin >> a[i][j].id;
for (int i = 1;i < n+1;i++)
for (int j = 0;j < m;j++)
cin >> a[i][j].cost;
for (int i = 0;i<m*n;i++)
{
int s = 0;
for (;;)
{
int j = last_time[order[i]];
last_time[order[i]]++;
if (state[a[order[i]][step[order[i]]].id][j] == 0)
{
state[a[order[i]][step[order[i]]].id][j] = 1;
s++;
}
else s = 0;
if (s == a[order[i]][step[order[i]]].cost)
{
step[order[i]]++;
break;
}
}
}
for (int i = 1;i < n+1;i++)
if (last_time[i] > last_time[0])
last_time[0] = last_time[i];
cout << last_time[0] << endl;
return 0;
}