/*
TASK:food
LANG:C
*/
#include <stdio.h>
#define MAXN 80
#define INF 1000000000
signed long price[MAXN], promo[MAXN][MAXN], safe[MAXN], reuse[MAXN];


int N, M;

int countre(int a)
{
    int i, ret=0;
    for(i=1; i<=N; i++)
        ret+=reuse[i]*price[i];
    return ret;
}

int getpromo(int max)
{
    int i, a, maxn=0, maxi=0;
    for(i=0; i<M; i++)
        if(safe[i]<=0)return i;
    for(i=0; i<M; i++)
        if(safe[i]<=max)
        {
            a = countre(i);
            maxn = maxn<a?a:maxn;
            maxi = maxn<a?i:maxi;
        }
        
    return maxn?maxi:-1;
}

int used(int a)
{
    int i, y;
    for(i=1; i<=N; i++)
    {
        safe[a] = INF;
        if(promo[a][i])
        {
            reuse[i]=0;
            for(y=0; y<M; y++)
                if(promo[y][i])
                {
                    safe[y]-=price[i];
                    promo[y][i]=0;
                }
        }
    }
}

int calc()
{
    int min=0, cur=0, i, y, a;
    while((a = getpromo(cur*-1))!=-1)
    {
        cur+=safe[a];
        min = (min<cur?min:cur);
        used(a);
    }
    return min*-1;
}
    
main()
{
    int i, y, a, b, s;
    
    scanf("%d %d", &N, &M);
    for(i=0; i<=N; i++)for(y=0; y<=N; y++)promo[i][y]=0;
    for(i=0; i<=N; i++)reuse[i]=0;
    
    for(i=1; i<=N; i++)
        scanf("%d", &price[i]);
    for(i=0; i<M; i++)
    {
        scanf("%d %d", &s, &a);
        safe[i]=-s;
        for(y=0; y<a; y++)
        {
            scanf("%d", &b);
            promo[i][b] = 1;
            reuse[b]++;
            safe[i]+=price[b];
        }
    }
    printf("%d\n", calc());
    return 0;
}

