#include <bits/stdc++.h>
using namespace std;
const int N = 1e4 + 5, M = 1e5 + 5;
const long long INF = 0x3fffffff;
int n, m, g, st, ed, te = 1;
int a[N], dep[M], vv[M << 1], pre[M << 1], tail[M], now[M];
long long Ans, Flow, ww[M << 1];
inline void add(int u, int v, int w) {
  ++te;
  vv[te] = v;
  ww[te] = (long long)w;
  pre[te] = tail[u];
  tail[u] = te;
}
bool bfs() {
  memset(dep, 0, sizeof(dep));
  dep[st] = 1;
  now[st] = tail[st];
  vector<int> q;
  q.push_back(st);
  int l = 0;
  while (l < q.size()) {
    int u = q[l++];
    for (int i = tail[u]; i; i = pre[i]) {
      int v = vv[i];
      long long w = ww[i];
      if (w == 0 || dep[v]) continue;
      dep[v] = dep[u] + 1;
      now[v] = tail[v];
      q.push_back(v);
      if (v == ed) return 1;
    }
  }
  return 0;
}
long long dfs(int u, long long val) {
  if (u == ed) return val;
  int &i = now[u];
  long long rest = val;
  for (; i && rest; i = pre[i]) {
    int v = vv[i];
    long long w = ww[i];
    if (dep[v] == dep[u] + 1 && w) {
      long long d = dfs(v, min(rest, w));
      if (!d) dep[v] = 0;
      rest -= d;
      ww[i] -= d;
      ww[i ^ 1] += d;
    }
  }
  return val - rest;
}
int main() {
  scanf("%d %d %d", &n, &m, &g);
  st = 0;
  ed = n + m + 1;
  for (int i = 1; i <= n; ++i) scanf("%d", &a[i]);
  for (int i = 1, x; i <= n; ++i) {
    scanf("%d", &x);
    if (a[i])
      add(i, ed, x), add(ed, i, 0);
    else
      add(st, i, x), add(i, st, 0);
  }
  for (int i = 1, id, w, k, x; i <= m; ++i) {
    scanf("%d %d %d", &id, &w, &k);
    Ans += w;
    if (id)
      for (int j = 1; j <= k; ++j)
        scanf("%d", &x), add(x, n + i, INF), add(n + i, x, 0);
    else
      for (int j = 1; j <= k; ++j)
        scanf("%d", &x), add(x, n + i, 0), add(n + i, x, INF);
    scanf("%d", &x);
    if (id)
      add(n + i, ed, w + x * g), add(ed, n + i, 0);
    else
      add(st, n + i, w + x * g), add(n + i, st, 0);
  }
  while (bfs()) {
    while (long long d = dfs(st, INF)) Flow += d;
  }
  printf("%lld", Ans - Flow);
}
