#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define X first #define Y second #define pb push_back #define rep(X,Y) for (int (X) = 0;(X) < (Y);++(X)) #define rrep(X,Y) for (int (X) = (Y-1);(X) >=0;--(X)) #define repe(X,Y) for ((X) = 0;(X) < (Y);++(X)) #define peat(X,Y) for (;(X) < (Y);++(X)) #define all(X) (X).begin(),(X).end() #define rall(X) (X).rbegin(),(X).rend() using namespace std; typedef long long ll; typedef pair pii; typedef pair pll; template using vv=vector>; template ostream& operator<<(ostream &os, const vector &t) { os<<"{"; rep(i,t.size()) {os< ostream& operator<<(ostream &os, const pair &t) { return os<<"("< Edges; typedef vector > Graph; void add_edge(Graph &g,int from,int to,int cap,Cost cost=0){ g[from].pb((Edge){to,cap,(int)g[to].size(),cost}); g[to].pb((Edge){from,0,(int)g[from].size()-1,-cost}); } Cost INF=1e7; vector used; int dfs(Graph &g,int v,int t,int f){ if(v==t) return f; used[v]=1; int re,i,j,k; for(i=0;i0){ e.cap-=d; g[e.to][e.rev].cap+=d; return d; } } return 0; } int max_flow(Graph &g,int s,int t){ int sum=0,f,V=g.size(); while(1){ used.resize(V); fill(all(used),0); sum+=f=dfs(g,s,t,INF); if(!f)return sum; } } int main(){ ios_base::sync_with_stdio(false); cout<>w>>n; vector a(n); rep(i,n) cin>>a[i]; cin>>m; vector b(m); rep(i,m) cin>>b[i]; Graph g(n+m+2); rep(i,n) add_edge(g,n+m,i,a[i]); rep(i,m) add_edge(g,n+i,n+m+1,b[i]); ll num,ng,tmp; rep(i,m){ ng=0; cin>>num; rep(j,num){ cin>>tmp; --tmp; ng|=1ll<>j&1)continue; //cout<=w?"SHIROBAKO":"BANSAKUTSUKITA")<