#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#define fo(i,a,b) for(i=a;i<=b;i++)
#define rep(i,a) for(i=first[a];i;i=next[i])
using namespace std;
const int maxn=500007;
int i,j,k,l,t,n,m,ans,g,xing[maxn],bian[maxn],se,len,you;
int last[maxn*2],next[maxn*2],first[maxn*2],chang[maxn*2],fan[maxn*2],num;
int S,T;
int data[maxn],d[maxn];
void add(int x,int y,int z){
last[++num]=y;
next[num]=first[x];
first[x]=num;
chang[num]=z;
fan[num]=num+1;
last[++num]=x;
next[num]=first[y];
first[y]=num;
chang[num]=0;
fan[num]=num-1;
}
bool bfs(){
memset(d,0,sizeof(d));
int head=0,tail=1,i,j,now;
data[head]=S,d[S]=1;
while(head<tail){
now=data[++head];
rep(i,now){
if(chang[i]&&!d[last[i]]){
data[++tail]=last[i];
d[last[i]]=d[now]+1;
}
}
}
return d[T]!=0;
}
int dinic(int x,int y){
int i,j,k=0;
if(x==T)return y;
rep(i,x){
if(chang[i]&&d[last[i]]==d[x]+1){
j=dinic(last[i],min(y,chang[i]));
if(j){
chang[i]-=j;
chang[fan[i]]+=j;
k+=j;
y-=j;
if(y<=0)break;
}
}
}
if(y<=0)d[x]=-1;
return k;
}
int main(){
scanf("%d%d%d",&n,&m,&g);
S=0,T=n+m+1;
fo(i,1,n)scanf("%d",&xing[i]);
fo(i,1,n){
scanf("%d",&bian[i]);
if(xing[i])add(i,T,bian[i]);
else add(S,i,bian[i]);
}
fo(i,1,m){
scanf("%d%d%d",&se,&l,&len);ans+=l;
fo(j,1,len){
scanf("%d",&k);
if(se)add(k,i+n,0x7fffffff);
else add(i+n,k,0x7fffffff);
}
scanf("%d",&you);
if(se)add(i+n,T,l+you*g);else add(S,i+n,l+you*g);
}
while(bfs())ans-=dinic(S,0x7fffffff);
printf("%d\n",ans);
}