#include using namespace std; typedef long long ll; typedef unsigned long long ull; typedef vector VI; typedef vector VVI; #define REP(i, n) for(int(i)=0;(i)<(n);++(i)) #define FOR(i, f, t) for(int(i)=(f);(i)<(t);(++i)) #define RREP(i, n) for(int(i)=(n)-1;(i)>=0;--(i)) #define FOREACH(it, c) for(auto it=(c).begin();it!=(c).end();++it) const int MOD = int(1e9+7); // Dinic class MaxFlow { int sa(int a, int b){ll c=(ll)a+b;return int(c 0){ F[u][v] += m; F[v][u] -= m; fin[u] = false; break; } } return m; } public: static const int INF = 1<<29; VVI C, E, F; MaxFlow(int n) : C(n, VI(n)), E(n), F(n, VI(n)){;} void set(int u, int v, int c){ if(C[u][v] == 0 && C[v][u] == 0) E[u].push_back(v); E[v].push_back(u); C[u][v] = c; } void add(int u, int v, int c){ set(u,v,sa(C[u][v],c));} int solve(const int s, const int t){ int n = C.size(), f = 0; VI P(n), M(n); bool cont = true; while(cont){ P = VI(n,-1); P[s] = 0; queue q; q.push(s); for(int d = n; !q.empty() && P[q.front()] < d; ){ int u = q.front(); q.pop(); if(u == t) d = P[u]; FOREACH(it, E[u]){ const int &v = *it; if(P[v] >= 0 || C[u][v] - F[u][v] <= 0) continue; P[v] = P[u]+1; q.push(v); } } VI fin(n); cont = false; while(1){ int m = aug(s, t, P, fin, INF); if(m == 0) break; f += m; cont = true; } } return f; } }; int W,N,J[55],M,C[55]; int res = 0; int main(){ do { cin.tie(0); ios_base::sync_with_stdio(false); } while(0); cin >> W >> N; REP(i,N) cin >> J[i]; cin >> M; REP(i,M) cin >> C[i]; set X[55]; REP(i,M){ int Q,x; cin >> Q; REP(j,Q){ cin >> x; X[i].insert(x-1); } } // 0~49 : 原画(N) // 50~99 : 作監(M) // 100 : s // 101 : t MaxFlow mf(102); int s = 100, t = 101; REP(i,N) mf.set(s,i,J[i]); REP(i,M){ const auto &x = X[i]; REP(j,N){ if(x.count(j)) continue; mf.set(j,50+i,mf.INF); } mf.set(50+i,t,C[i]); } cout << (mf.solve(s,t) >= W ? "SHIROBAKO" : "BANSAKUTSUKITA") << endl; return 0; }