#include<bits/stdc++.h>
using namespace std;
const int inf=100000000;
int n,m,h,t[11][5],g[16],p[11],ans,a[11],b[11],q[11][102][102],xa[11],xb[11],ya[11],yb[11],f[102][102],rem[16],p1=0,r[101][101],huihe,fj[11];
inline int read(){
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
return x*f;
}
void dp(int pan,int hui,int xx,int yy,int HP){
if(xx>a[hui]||yy>b[hui]||xx<1||yy<1) return;
if(t[hui][4]==1&&t[hui][2]==1&&xx==a[hui]&&yy==1) return;
else if(t[hui][4]==1&&t[hui][1]==1&&xx==a[hui]&&yy==b[hui]) return;
else if(t[hui][3]==1&&t[hui][2]==1&&xx==1&&yy==1) return;
else if(t[hui][3]==1&&t[hui][1]==1&&xx==1&&yy==b[hui]) return;
r[xx][yy]=1;
if(r[xx-1][yy]==0&&t[hui][3]==1) dp(pan,hui,xx-1,yy,HP);
if(r[xx+1][yy]==0&&t[hui][4]==1) dp(pan,hui,xx+1,yy,HP);
if(r[xx][yy-1]==0&&t[hui][2]==1) dp(pan,hui,xx,yy-1,HP);
if(r[xx][yy+1]==0&&t[hui][1]==1) dp(pan,hui,xx,yy+1,HP);
if(pan==0||(pan==1&&q[hui][xx][yy]<=HP/2)){
int w=f[xx][yy];
if(t[hui][3]==1) f[xx][yy]+=f[xx-1][yy];
else f[xx][yy]+=f[xx+1][yy];
if(t[hui][2]==1) w+=f[xx][yy-1];
else w+=f[xx][yy+1];
f[xx][yy]=min(f[xx][yy],w);
}
else{
int w=f[xx][yy];
if(t[hui][3]==1) f[xx][yy]+=f[xx-1][yy];
else f[xx][yy]+=f[xx+1][yy];
if(t[hui][2]==1) w+=f[xx][yy-1];
else w+=f[xx][yy+1];
f[xx][yy]=min(f[xx][yy],w)-p[hui];
}
return;
}
void find(int jia,int k,int hp){
if(p1==1) return;
if(k==n+1){
int an=0;
for(int i=1;i<=h;i++){
if(rem[i]==0) an+=g[i];
}
p1=1;
ans=2*an+hp;
cout<<ans;
return;
}
memset(r,0,sizeof(r));
for(int i=0;i<=a[k]+1;i++){
for(int j=0;j<=b[k]+1;j++){
if(i==0||j==0||i==a[k]+1||j==b[k]+1) {
f[i][j]=inf;}
else f[i][j]=q[k][i][j];
}
}
if(jia==0){
dp(1,k,xb[k],yb[k],hp);
fj[k]=f[xb[k]][yb[k]];
if(hp-fj[k]>0){
find(0,k+1,hp-fj[k]);
find(1,k+1,hp-fj[k]);
}
else huihe=max(huihe,k);
}
else if(jia==1){
dp(0,k,xb[k],yb[k],hp);
fj[k]=f[xb[k]][yb[k]];
for(int i=1;i<=h;i++){
if(rem[i]==0&&min(m,hp+g[i])-fj[k]>0){
rem[i]=1;
if(min(m,hp+g[i])-fj[k]>0){
find(0,k+1,min(m,hp+g[i])-fj[k]);
find(1,k+1,min(m,hp+g[i])-fj[k]);
}
else huihe=max(huihe,k);
rem[i]=0;
break;
}
}
}
return;
}
int main(){
n=read();m=read();h=read();
for(int i=1;i<=h;i++) g[i]=read();
sort(g+1,g+h+1);
for(int i=1;i<=n;i++) p[i]=read();
for(int k=1;k<=n;k++){
a[k]=read();b[k]=read();
xa[k]=read();ya[k]=read();xb[k]=read();yb[k]=read();
int e=read();
t[k][e]=1;
e=read();
t[k][e]=1;
for(int i=1;i<=a[k];i++){
for(int j=1;j<=b[k];j++){
q[k][i][j]=read();
}
}
}
p1=0;
find(0,1,m);
if(p1==0) cout<<huihe;
return 0;
}