#pragma GCC optimize("O3") #include using namespace std; using ll=long long; using P=pair; template using V=vector; #define fi first #define se second #define all(v) (v).begin(),(v).end() const ll inf=(1e18); //const ll mod=998244353; const ll mod=1000000007; const vector dy={-1,0,1,0},dx={0,-1,0,1}; ll GCD(ll a,ll b) {return b ? GCD(b,a%b):a;} ll LCM(ll c,ll d){return c/GCD(c,d)*d;} struct __INIT{__INIT(){cin.tie(0);ios::sync_with_stdio(false);cout< bool chmax(T &a, const T &b) { if (a bool chmin(T &a, const T &b) { if (a>b) { a=b; return 1; } return 0; } templatevoid debag(const vector &a){cerr<<"debag :";for(auto v:a)cerr<void print(const vector &a){for(auto v:a)cout< G[MAX_V];//vectorの"配列" //DFSで調べた頂点を記録 bool used[MAX_V]={}; //辺の情報を代入する関数 void add_edge(ll from,ll to,ll cap){ G[from].emplace_back(to,cap,ll(G[to].size())); G[to].emplace_back(from,0,ll(G[from].size()-1)); } //増加パスをDFSで探す ll dfs(ll v,ll t,ll f){ if(v==t)return f; used[v]=true; for(int i=0;i0){ ll d=dfs(e.to,t,min(f,e.cap)); if(d>0){ e.cap-=d;//使った分減らす G[e.to][e.rev].cap+=d;//使った分逆辺の容量を増やす return d; } } } return 0; } //sからtへの最大流を求める ll fmax(ll s,ll t){ ll flow=0; while(1){ for(int i=0;i>w; int n; cin>>n; V j(n); for(int i=0;i>j[i]; int m; cin>>m; V c(m); for(int i=0;i>c[i]; Flow flow; int S=0,T=n+m+2; for(int i=0;i ok(n,true); int q; cin>>q; for(int k=0;k>a; ok[a-1]=false; } for(int k=0;k