#include<bits/stdc++.h>
using namespace std;
constexpr int INF=1e9;
struct MaxFlowGraph{
    struct edge{int to,cap,rev;};
    MaxFlowGraph(int n):G(n),_n(n){}
    void add_edge(int a,int b,int c){
        assert(0<=a && a<_n);
        assert(0<=b && b<_n);
        G[a].push_back({b,c,G[b].size()});
        G[b].push_back({a,0,G[a].size()-1});
    }
    int flow(int s,int t){
        int res=0;
        while(true){
            used.assign(_n,false);
            int fw=dfs(s,t,INF);
            if(fw==0)break;
            res+=fw;
        }
        return res;
    }
    private:
    int _n;
    std::vector<std::vector<edge>> G;
    std::vector<bool> used;
    int dfs(int v,int t,int f){
        if(v==t)return f;
        used[v]=true;
        for(edge &e:G[v]){
            if(used[e.to] || e.cap==0) continue;
            int fw=dfs(e.to,t,min(f,e.cap));
            if(fw==0) continue;
            e.cap-=fw;
            G[e.to][e.rev].cap+=fw;
            return fw;
        }
        return 0;
    }
};
int main(){
    int W,N,M; cin>>W>>N;
    vector<int> J(N);
    for(int i=0;i<N;i++)cin>>J[i];
    cin>>M;
    vector<int> C(M);
    for(int i=0;i<M;i++)cin>>C[i];
    MaxFlowGraph G(N+M+2);
    int s=N+M,t=s+1;
    for(int i=0;i<N;i++)G.add_edge(s,i,J[i]);
    for(int i=0;i<M;i++)G.add_edge(i+N,t,C[i]);
    for(int i=0;i<M;i++){
        vector<bool> A(N,true);
        int Q; cin>>Q;
        for(int j=0;j<Q;j++){
            int X; cin>>X;
            A[X-1]=false;
        }
        for(int j=0;j<N;j++){
            if(A[j])G.add_edge(j,N+i,W);
        }
    }
    puts(G.flow(s,t)<W?"BANSAKUTSUKITA":"SHIROBAKO");
}