#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; const double PI = 3.14159265358979323846; const double EPS = 1e-12; const int INF = 1<<25; typedef pair P; typedef long long ll; typedef unsigned long long ull; #define V 110 struct edge{ll to, cap, rev;}; vector G[V]; bool used[V]; void add_edge(int from, int to, int cap){ G[from].push_back((edge){to, cap, G[to].size()}); G[to].push_back((edge){from, cap, G[from].size()-1}); } ll dfs(int v, int t, ll f){ if(v==t) return f; used[v] = true; for(int i = 0; i < G[v].size(); i++){ edge &e = G[v][i]; if(!used[e.to] && e.cap > 0){ 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; } ll max_flow(int s, int t){ ll flow = 0; while(1){ memset(used, 0, sizeof(used)); ll f = dfs(s, t, INF); if(f==0) return flow; flow += f; } } bool bad[V][V]; int main(){ ll w, n, m, s = V-2, t = V-1; cin>>w>>n; for(int i = 0; i < n; i++){ int a; cin>>a; add_edge(s, i, a); } cin>>m; for(int i = 0; i < m; i++){ int a; cin>>a; add_edge(n+i, t, a); } for(int i = 0; i < m; i++){ int q; cin>>q; for(int j = 0; j < q; j++){ int a; cin>>a; bad[a-1][i] = true; } } for(int i = 0; i < n; i++) for(int j = 0; j < m; j++) if(!bad[i][j]) add_edge(i, n+j, INF); cout<<(max_flow(s, t)>=w?"SHIROBAKO":"BANSAKUTSUKITA")<