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

#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#define MAX 256
#define in cin
#define out cout
using namespace std;

//ifstream in; ofstream out;
int a[MAX];
int food[MAX][MAX]; int cnt = 0;
int vis[MAX];
int pos[MAX];
int n, m;
int ans = 0;


int sort1(const void *a1, const void *b1)
{
int *aa; int *bb;

aa = (int *)a1;
bb = (int *)b1;

return bb[0] - aa[0];
}


void dowork(int cur, int sum)
{
int i, c;
int add;
int vv[MAX]; int cc;

if ((sum + pos[cur]) < ans) return;
if (sum > ans) ans = sum;

if (cur>=cnt) return;
else
   {
   if ((sum + pos[cur+1]) > ans) dowork(cur+1, sum);
   
   if ((sum + pos[cur]) > ans)
   {
   cc = 0;
   add = food[cur][0];
   for (i=2; i<food[cur][1]+2; i++)
       {
       c = food[cur][i];
       if (!vis[c]) 
          {
          vis[c] = 1; 
          add -= a[c];
          vv[cc] = c; cc++;
          }
       }  
   dowork(cur+1, sum+add);
   for (i=0; i<cc; i++) vis[vv[i]] = 0;
   }
   }

return;
}



void input(void)
{
int i, c;
int ff, nn, x;

for (i=0; i<MAX; i++) {vis[i] = 0; a[i] = 0;}

in >> n >> m;
for (i=1; i<=n; i++) in >> a[i];
for (i=0; i<m; i++)
    {
    in >> ff >> nn;
    food[cnt][0] = ff;
    food[cnt][1] = nn;
    for (c=2; c<=(nn+1); c++) {in >> x; food[cnt][c] = x;} 
    cnt++;
    }

qsort(food, cnt, sizeof(food[0]), sort1);

/*
for (i=0; i<cnt; i++)
    {
    out << food[i][0] << " ";
    out << food[i][1] << " ";
    for (c=0; c<food[i][1]-1; c++) out << food[i][c+2] << " ";
    out << food[i][food[i][1]+1] << endl;
    }
*/

for (i=cnt-1, ff=0; i>=0; i--)
    {
    ff += food[i][0];
    pos[i] = ff;
    }


return;
}


void output(void)
{
out << ans << endl;
return;
}

int main(void)
{
//in.open("food.in"); out.open("food.out");

input();
dowork(0, 0);
output();

return 0;
}

