#include
#include <cstring>
#include
using namespace std;
const int maxn = 30;
const int maxv = 1e6;
int mach[maxn][maxv];//第i台机器在时间j上是否被使用
int a[maxn][maxn];//第i件工件的第j项工序的机器号
int cost[maxn][maxn];//第i件工件的第j项工序所需的时间
int last[maxn];//工件完成上一个工序时的时间
int step[maxn];//工件进行到第几项工序
int list[maxv];
int n, m;
int main() {
int ans = 0;
cin >> m >> n;
for(int i = 1; i <= n * m; i++)
cin >> list[i];
for(int i = 1; i <= n;i++)
for(int j = 1; j <= m; j++)
cin >> a[i][j];
for(int i = 1; i <= n;i++)
for(int j = 1; j <= m; j++)
cin >> cost[i][j];
for(int i = 1; i <= n * m; i++) {
int now = list[i];
step[now]++;
int id = a[now][step[now]];
int time = cost[now][step[now]];
int sum = 0;
for(int j = last[now] + 1; ; j++) {
if(mach[id][j] == 0)
sum++;
else
sum = 0;
if(sum == time) {
for(int k = j - sum + 1; k <= j; k++)
mach[id][k] = true;
last[now] = j;
ans = max(ans, j);
break;
}
}
}
cout << ans << endl;
return 0;
}