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