#include<stdio.h>
#include<string.h>
main()
{int a,b,c,d,m,n,i,p,q;/*a所用机器,c,i做循环,m,n为机器,工件数*/
int e[401],f[21][21][3],g[21][2],count[21];/*f为工件工序,所用机器,所用时间,完成情况
g为机器加工工件,h为工件进行到第几工序*/
int h[21];
for(i=0;i<=20;i++)
h[i]=1;
memset(f,0,sizeof(f));
scanf("%d %d",&m,&n);
for(i=1;i<=n;i++)
f[i][0][2]=1;
for(i=1;i<=m*n;i++)
scanf("%d",&e[i]);
for(i=1;i<=n;i++)
for(c=1;c<=m;c++)
scanf("%d",&f[i][c][0]);
for(i=1;i<=n;i++)
for(c=1;c<=m;c++)
scanf("%d",&f[i][c][1]);
memset(g,0,sizeof(g));
s:
memset(count,0,sizeof(count));
d=g[1][0];
a=1;
for(i=1;i<=m;i++)
if(g[i][0]<d)
{d=g[i][0];
a=i;}
eve:
f[g[a][1]][h[g[a][1]]-1][2]=1;
d=1;
for(i=1;i<=m*n;i++)
{p=e[i];
if(e[i]!=0)
if(f[p][h[p]][0]==a && f[p][h[p]-1][2]==1)
{e[i]=0;
g[a][0]=g[a][0]+f[p][h[p]][1];
h[p]++;
g[a][1]=p;
d=0;
break;}}
for(c=1;c<=n;c++)
if(d==1 && f[c][m][2]==0)
{count[a]=1;
b=1000;
a=1;
for(i=1;i<=m;i++)
if (g[i][0]<b && count[i]==0)
{b=g[i][0];
a=i;}
for(i=1;i<=m;i++)
if(count[i]==1)
g[i][0]=g[a][0];
goto eve;
}
for(i=1;i<=n;i++)
if(f[i][m][2]==0)
goto s;
for(i=1;i<=m;i++)
if(g[i][0]>d)
d=g[i][0];
printf("%d",d);
return 0;
}