#include <bits/stdc++.h>
using namespace std;
inline int read() {
  bool ok = 0;
  int res = 0;
  char c;
  while (((c = getchar()) < '0' || c > '9') && c != '-')
    ;
  if (c == '-')
    ok = 1;
  else
    res = c - 48;
  while ((c = getchar()) >= '0' && c <= '9')
    res = (res << 3) + (res << 1) + (c - 48);
  return ok ? ~res + 1 : res;
}
const int N = 4e5, M = 4e5;
int h[N], net[M], go[M], val[M], dep[N], ecnt = 1, cap[M];
void add(int u, int v, int w) {
  go[++ecnt] = v;
  cap[ecnt] = w;
  net[ecnt] = h[u];
  h[u] = ecnt;
  swap(u, v);
  go[++ecnt] = v;
  cap[ecnt] = 0;
  net[ecnt] = h[u];
  h[u] = ecnt;
}
int s, t, n, m;
int bfs() {
  memset(dep, 0, sizeof(dep));
  queue<int> q;
  q.push(s);
  dep[s] = 1;
  while (!q.empty()) {
    int u = q.front();
    q.pop();
    for (int e = h[u]; e; e = net[e]) {
      int v = go[e];
      if (!dep[v] && cap[e]) {
        dep[v] = dep[u] + 1;
        q.push(v);
      }
    }
  }
  return dep[t];
}
int dfs(int u, int flow) {
  if (u == t) return flow;
  int res = 0, tot = 0;
  for (int e = h[u]; e; e = net[e]) {
    int v = go[e];
    if (dep[v] == dep[u] + 1 && cap[e]) {
      res = dfs(v, min(flow, cap[e]));
      tot += res;
      cap[e] -= res;
      cap[e ^ 1] += res;
      flow -= res;
    }
  }
  if (tot == 0) dep[u] = 0;
  return tot;
}
int a[100000], v[100000];
int g;
int main() {
  int cntg = 0;
  int sum = 0;
  int sum1 = 0;
  s = N - 2;
  t = N - 1;
  n = read();
  m = read();
  g = read();
  for (int i = 1; i <= n; i++) a[i] = read();
  for (int i = 1; i <= n; i++) {
    v[i] = read();
    if (a[i] == 0)
      sum -= v[i], add(s, i, v[i]), sum1 += v[i];
    else
      add(i, t, v[i]);
  }
  for (int i = 1, w, k, u, op; i <= m; i++) {
    op = read();
    w = read();
    k = read();
    while (k--) {
      u = read();
      if (op)
        add(u, i + n, 1e9);
      else
        add(i + n, u, 1e9);
    }
    int newop = read();
    if (op == 0 && newop == 1) sum -= g;
    if (op == 0)
      add(s, i + n, w + (newop ? g : 0)), sum1 += w + (newop ? g : 0);
    else
      add(i + n, t, w + (newop ? g : 0));
    if (op == 1) sum += w;
  }
  int ans = 0;
  int res = 0;
  while (bfs()) {
    ans += dfs(s, 1e9);
  }
  printf("%d\n", sum + sum1 - ans);
  return 0;
}
