#include <bits/stdc++.h>
using namespace std;
int inf = (1 << 29) - 1;
int n, m, S, T, ans;
int a[20000], b[20];
struct edge {
  int b, len;
  edge *nxt, *op;
} e[100000], *le(e);
edge *head[20000];
void add(int u, int v, int w) {
  le->b = v, le->len = w, le->nxt = head[u], le->op = le + 1, head[u] = le++;
  le->b = u, le->len = 0, le->nxt = head[v], le->op = le - 1, head[v] = le++;
}
edge *cur[20000], *pre[20000];
int low[20000], dis[20000], gap[20000];
void init() {
  int g, v, w, k, p, q;
  scanf("%d%d%d", &n, &m, &g);
  S = 0, T = n + m + 1;
  for (int i = 1; i <= (n); ++i) scanf("%d", &a[i]);
  for (int i = 1; i <= (n); ++i) {
    scanf("%d", &v);
    if (a[i])
      add(i, T, v);
    else
      add(S, i, v);
  }
  for (int i = 1; i <= (m); ++i) {
    scanf("%d%d%d", &p, &w, &k);
    for (int j = 1; j <= (k); ++j) scanf("%d", &b[j]);
    scanf("%d", &q);
    ans += w;
    if (q) w += g;
    if (p) {
      for (int j = 1; j <= (k); ++j) add(b[j], n + i, inf);
      add(n + i, T, w);
    } else {
      add(S, n + i, w);
      for (int j = 1; j <= (k); ++j) add(n + i, b[j], inf);
    }
  }
}
int SAP() {
  int flow(0);
  low[S] = inf, gap[0] = T + 1;
  for (int i = (S); i <= (T); ++i) dis[i] = 0, cur[i] = head[i];
  edge *i;
  int u(S), v;
  while (dis[S] < T + 5) {
    for (i = cur[u]; i; i = i->nxt)
      if (i->len && dis[v = i->b] + 1 == dis[u]) break;
    if (i) {
      cur[u] = i;
      pre[v] = i;
      low[v] = min(low[u], i->len);
      if ((u = v) == T) {
        for (; u != S; u = pre[u]->op->b) {
          pre[u]->len -= low[T];
          pre[u]->op->len += low[T];
        }
        flow += low[T];
      }
    } else {
      cur[u] = head[u];
      if (--gap[dis[u]] == 0) break;
      dis[u] = T + 5;
      for (i = cur[u]; i; i = i->nxt)
        if (i->len && dis[i->b] + 1 < dis[u]) dis[u] = dis[i->b] + 1;
      ++gap[dis[u]];
      if (u != S) u = pre[u]->op->b;
    }
  }
  return flow;
}
int main() {
  init();
  ans -= SAP();
  printf("%d\n", ans);
  return 0;
}
