#include #include using namespace std; int main() { cin.tie(0)->sync_with_stdio(0); int W; cin >> W; int N; cin >> N; vector J(N); for (int i = 0; i < N; i++) { cin >> J[i]; } int M; cin >> M; vector C(M); for (int i = 0; i < M; i++) { cin >> C[i]; } vector> X(M); for (int i = 0; i < M; i++) { int Q; cin >> Q; for (int j = 0; j < Q; j++) { int x; cin >> x; x--; X[i].push_back(x); } sort(begin(X[i]), end(X[i])); } atcoder::mf_graph G(N + M + 2); int S = N + M; int T = N + M + 1; for (int i = 0; i < N; i++) { G.add_edge(S, i, J[i]); } for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { if (!binary_search(begin(X[j]), end(X[j]), i)) { G.add_edge(i, N + j, INT_MAX); } } } for (int i = 0; i < M; i++) { G.add_edge(N + i, T, C[i]); } int flow = G.flow(S, T); cout << (flow >= W ? "SHIROBAKO" : "BANSAKUTSUKITA") << endl; }