#include <bits/stdc++.h>
using namespace std;
const int inf = 1 << 30;
const long long mod = 95542721;
const double eps = 1e-9;
const double pi = 3.1415926535897932384626;
const int DX[] = {1, 0, -1, 0}, DY[] = {0, 1, 0, -1};
long long powmod(long long a, long long b) {
  long long res = 1;
  a %= mod;
  for (; b; b >>= 1) {
    if (b & 1) res = res * a % mod;
    a = a * a % mod;
  }
  return res;
}
long long powmod(long long a, long long b, long long mod) {
  long long res = 1;
  a %= mod;
  for (; b; b >>= 1) {
    if (b & 1) res = res * a % mod;
    a = a * a % mod;
  }
  return res;
}
long long gcd(long long a, long long b) { return b ? gcd(b, a % b) : a; }
namespace flow {
const int M = 300000, N = 30000;
int y[M], nxt[M], gap[N], fst[N], c[N], pre[N], q[N], dis[N];
int f[M];
int S, T, tot, Tn;
void init(int s, int t, int tn) {
  tot = 1;
  memset(fst, 0, sizeof(fst));
  S = s;
  T = t;
  Tn = tn;
}
void add(int u, int v, int c1, int c2 = 0) {
  tot++;
  y[tot] = v;
  f[tot] = c1;
  nxt[tot] = fst[u];
  fst[u] = tot;
  tot++;
  y[tot] = u;
  f[tot] = c2;
  nxt[tot] = fst[v];
  fst[v] = tot;
}
int sap() {
  int u = S, t = 1;
  int flow = 0;
  for (int i = 0; i < (int)Tn; i++) c[i] = fst[i], dis[i] = Tn, gap[i] = 0;
  q[0] = T;
  dis[T] = 0;
  pre[S] = 0;
  for (int i = 0; i < (int)t; i++) {
    int u = q[i];
    for (int j = fst[u]; j; j = nxt[j])
      if (dis[y[j]] > dis[u] + 1 && f[j ^ 1])
        q[t++] = y[j], dis[y[j]] = dis[u] + 1;
  }
  for (int i = 0; i < (int)Tn; i++) gap[dis[i]]++;
  while (dis[S] <= Tn) {
    while (c[u] && (!f[c[u]] || dis[y[c[u]]] + 1 != dis[u])) c[u] = nxt[c[u]];
    if (c[u]) {
      pre[y[c[u]]] = c[u] ^ 1;
      u = y[c[u]];
      if (u == T) {
        int minf = inf;
        for (int p = pre[T]; p; p = pre[y[p]]) minf = min(minf, f[p ^ 1]);
        for (int p = pre[T]; p; p = pre[y[p]]) f[p ^ 1] -= minf, f[p] += minf;
        flow += minf;
        u = S;
      }
    } else {
      if (!(--gap[dis[u]])) break;
      int mind = Tn;
      c[u] = fst[u];
      for (int j = fst[u]; j; j = nxt[j])
        if (f[j] && dis[y[j]] < mind) mind = dis[y[j]], c[u] = j;
      dis[u] = mind + 1;
      gap[dis[u]]++;
      if (u != S) u = y[pre[u]];
    }
  }
  return flow;
}
};  // namespace flow
int n, m, g, w, k, Sx, fg, ans;
int sx[10100], c[20];
int main() {
  scanf("%d%d%d", &n, &m, &g);
  flow::init(0, n + m + 1, n + m + 2);
  for (int i = 0; i < (int)n; i++) scanf("%d", sx + i);
  for (int i = 0; i < (int)n; i++) {
    scanf("%d", &w);
    if (sx[i] == 0)
      flow::add(0, i + 1, w);
    else
      flow::add(i + 1, n + m + 1, w);
  }
  for (int i = 0; i < (int)m; i++) {
    scanf("%d%d%d", &Sx, &w, &k);
    for (int j = 0; j < (int)k; j++) scanf("%d", c + j);
    scanf("%d", &fg);
    ans += w;
    if (fg) w += g;
    if (Sx == 0) {
      flow::add(0, i + n + 1, w);
      for (int j = 0; j < (int)k; j++) flow::add(i + n + 1, c[j], inf);
    } else {
      flow::add(i + n + 1, n + m + 1, w);
      for (int j = 0; j < (int)k; j++) flow::add(c[j], i + n + 1, inf);
    }
  }
  printf("%d\n", ans - flow::sap());
}
