func_code_string: #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;   }   