#include #include #include using namespace std; using namespace atcoder; using mint = modint998244353; #define rep(i,n) for (int i = 0; i < (n); ++i) #define Inf 1000000001 long long I0 = 10000000000000; long long I1 = 1000000000000000000; int main(){ int N,M,K,P; cin>>N>>M>>K>>P; mf_graph G(N+M+K+2); int S = N+M+K; int T = N+M+K+1; vector in(N),im(M),ik(K); rep(i,N){ int E; cin>>E; in[i] = G.add_edge(S,i,I0-E); G.add_edge(i,T,I0); } rep(i,M){ int F; cin>>F; G.add_edge(S,i+N,I0); im[i] = G.add_edge(i+N,T,I0-F); } rep(i,K){ int V; cin>>V; ik[i] = G.add_edge(S,i+N+M,I0+V); G.add_edge(i+N+M,T,I0); } rep(i,N){ int L; cin>>L; rep(j,L){ int A; cin>>A; A--; G.add_edge(A+N+M,i,I1); } } rep(i,P){ int I,J; cin>>I>>J; I--,J--; //G.add_edge(I,N+J,I1); G.add_edge(N+J,I,I1); } long long ans = G.flow(S,T); ans -= I0 * (N+M+K); ans *= -1; cout< s; vector ind; auto b = G.min_cut(S); rep(i,K){ if(b[N+M+i]==false){ s.push_back("Preparation"); ind.push_back(i+1); } } rep(i,N){ if(b[i]==false){ s.push_back("Goal"); ind.push_back(i+1); } } rep(i,M){ if(b[i+N]==true){ s.push_back("Action"); ind.push_back(i+1); } } cout<