/*
TASK:food
LANG:C
*/

#include <stdio.h>
#include <string.h>

#define MAX 15
#define MAX_S 85
#define BIT(a, b) (((a) >> (b)) & 1)

typedef struct 
{
  int cnt;
  int z[10];
  int d;
} sale;

int input(void);
void solve(void);
void check_it(void);

int n, m;
int P[MAX];
int U[MAX], q;
sale S[MAX];
int mask;
int best;

int main(void)
{
  input(); 
  solve();  
    
  return 0;
}

int input(void)
{
  int a;
  int i, j;
  
  if(scanf("%d %d", &n, &m) != 2) return 0;
  
  for(i = 0; i < n; i++) scanf("%d", &P[i]);
  
  for(i = 0; i < m; i++) {
    scanf("%d %d", &S[i].d, &S[i].cnt);
    for(j = 0; j < S[i].cnt; j++) {
      scanf("%d", &a); a--;
      S[i].z[j] = a;
    }
  }
  
  return 1;
}

void solve(void)
{
  if(m > MAX) { printf("0\n"); return; }
  
  memset(U, 0, sizeof(U));
  best = 0; q = 1;
  for(mask = 0; mask < (1 << m); mask++, q++) check_it();
  
  printf("%d\n", -best);
}

void check_it(void)
{
  int sum = 0;
  int i, j;
  
  for(i = 0; i < m; i++)
    if(BIT(mask, i)) {
      sum -= S[i].d;
      for(j = 0; j < S[i].cnt; j++) 
        if(U[S[i].z[j]] < q) {
          U[S[i].z[j]] = q;
          sum += P[S[i].z[j]];
        }
    }
  if(sum < best) best = sum;
}
         
