/*
TASK:food
LANG:C++
*/

#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <vector>

using namespace std;

#define MAXN 128

#define max(a,b) ((a)>(b)?(a):(b))

typedef struct kiriq {
    int k;
    int N;
    int f[16];
} kiriq;

int N, M;
int c[MAXN];
kiriq a[MAXN];

int main() {
    
    
    scanf("%d%d", &N, &M);
    
    
    for (int i = 0; i < N; i++) {
        scanf("%d", &c[i]);
    }
    
    for (int i = 0; i < M; i++) {
        scanf("%d %d", &a[i].k, &a[i].N);
        for (int j = 0; j < a[i].N; j++) {
            scanf("%d", &a[i].f[j]);
            a[i].f[j]--;
        }
    }
    int ans = 0;
    for (int i = 0; i < N; i++) {
        ans -= c[i];
    }
    for (int i = 0; i < M; i++) {
        ans += a[i].k;
    }
    bool used[MAXN];
    memset(used, true, sizeof(used));
    
    for (int i = 0; i < N; i++) {
        int kiriqta = 0;
        for (int j = 0; j < M; j++) {
            for (int k = 0; k < a[j].N; k++) {
                if (!used[j]) {
                    continue;
                }
                if (a[j].f[k] == i) {
                    kiriqta -= a[j].k;
                }
            }
        }
        kiriqta += c[i];
        if (kiriqta > 0) {
            for (int j = 0; j < M; j++) {
                if (!used[j]) {
                    continue;
                }
                for (int k = 0; k < a[j].N; k++) {
                    if (a[j].f[k] == i) {
                        used[j] = false;
                    }
                }
            }
            ans += kiriqta;
        }
    }
    if (ans > 0) {
        printf("%d\n", ans);
    }
    else {
        printf("%d\n", ans);
    }
    return 0;
}
    
