# coding: utf-8 import queue class Dinic: """Implementation of Dinic's Alogorithm""" def __init__(self, v, inf = 1000000007): self.V = v self.inf = inf self.G = [[] for _ in range(v)] self.level = [0 for _ in range(v)] self.iter = [0 for _ in range(v)] def add_edge(self, from_, to, cap): self.G[from_].append({'to':to, 'cap':cap, 'rev':len(self.G[to])}) self.G[to].append({'to':from_, 'cap':0, 'rev':len(self.G[from_])-1}) # sからの最短距離をbfsで計算 def bfs(self, s): self.level = [-1 for _ in range(self.V)] self.level[s] = 0; que = queue.Queue() que.put(s) while not que.empty(): v = que.get() for i in range(len(self.G[v])): e = self.G[v][i] if e['cap'] > 0 and self.level[e['to']] < 0: self.level[e['to']] = self.level[v] + 1 que.put(e['to']) # 増加バスをdfsで探す def dfs(self, v, t, f): if v == t: return f for i in range(self.iter[v], len(self.G[v])): self.iter[v] = i e = self.G[v][i] if e['cap'] > 0 and self.level[v] < self.level[e['to']]: d = self.dfs(e['to'], t, min(f, e['cap'])) if d > 0: e['cap'] -= d self.G[e['to']][e['rev']]['cap'] += d return d return 0 def max_flow(self, s, t): flow = 0 while True: self.bfs(s) if self.level[t] < 0 : return flow self.iter = [0 for _ in range(self.V)] f = self.dfs(s,t, self.inf) while f > 0: flow += f f = self.dfs(s,t, self.inf) W = int(input()) N = int(input()) J = [int(x) for x in input().split()] M = int(input()) C = [int(x) for x in input().split()] mf = Dinic(N+M+2) source, sink = N+M, N+M+1 INF = 10**9 for i, j in enumerate(J): mf.add_edge(source, i, j) for i, c in enumerate(C): mf.add_edge(N+i, sink, c) _, *X = [int(x)-1 for x in input().split()] for j in range(N): if j not in X: mf.add_edge(j, i+N, INF) maxflow = mf.max_flow(source, sink) print("SHIROBAKO" if maxflow >= W else "BANSAKUTSUKITA")