#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9;
struct arr {
  int go, Next, s;
} a[2000005];
int f[15005], q[15005], End[15005], sex[15005], cnt;
int n, m, i, S, T, boo, j, num, ans, g, x, o, id;
inline int bfs() {
  for (int i = 1; i <= T; i++) f[i] = -1;
  int h = 0, t = 1;
  q[1] = S;
  f[S] = 0;
  while (h < t) {
    int k = q[++h], go;
    if (k == T) return 1;
    for (int i = End[k]; i; i = a[i].Next)
      if (f[go = a[i].go] == -1 && a[i].s) f[go] = f[k] + 1, q[++t] = go;
  }
  return 0;
}
int dinic(int k, int sum) {
  if (k == T) return sum;
  int os = sum, go;
  for (int i = End[k]; i && os; i = a[i].Next)
    if (f[go = a[i].go] == f[k] + 1 && a[i].s) {
      int F = dinic(go, min(os, a[i].s));
      a[i].s -= F;
      a[i ^ 1].s += F;
      os -= F;
    }
  if (sum == os) f[k] = -1;
  return sum - os;
}
inline void add(int u, int v, int w) {
  a[++cnt] = (arr){v, End[u], w};
  End[u] = cnt;
  a[++cnt] = (arr){u, End[v], 0};
  End[v] = cnt;
}
int main() {
  scanf("%d%d%d", &n, &m, &g);
  S = n + m + 1;
  T = S + 1;
  cnt = 1;
  for (i = 1; i <= n; i++) scanf("%d", &sex[i]);
  for (i = 1; i <= n; i++) {
    scanf("%d", &x);
    if (!sex[i])
      add(S, i, x);
    else
      add(i, T, x);
  }
  for (i = 1; i <= m; i++) {
    scanf("%d%d%d", &boo, &x, &num);
    ans += x;
    for (j = 1; j <= num; j++) {
      scanf("%d", &id);
      if (boo == 1)
        add(id, n + i, INF);
      else
        add(n + i, id, INF);
    }
    scanf("%d", &o);
    if (o) x += g;
    if (boo == 1)
      add(n + i, T, x);
    else
      add(S, n + i, x);
  }
  while (bfs()) ans -= dinic(S, INF);
  printf("%d\n", ans);
}
