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

#include <cstdio>
#include <vector>
using namespace std;

const int MAX_N = 80;

struct elem {
	int p;
	vector<int> a;	
};

int n, m;
int A[MAX_N];
elem B[MAX_N];

void input ()
{
	int i, j, a, b;
	
	scanf ("%d%d", &n, &m);
	
	for (i=0; i<n; i++)
		scanf ("%d", &A[i]);
		
	for (i=0; i<m; i++) {
		scanf ("%d", &B[i].p);
		scanf ("%d", &a);
		
		for (j=0; j<a; j++) {
			scanf ("%d", &b);
			B[i].a.push_back(b-1);
		}	
	}
}

void solve ()
{
	int i, j, k, q, limit = n<=15?n:15;
	int curr, ans=0;
	
	for (i=0; i<(1<<limit); i++) {
		curr=0;
		for (j=0; j<limit; j++)
			if ((i>>j)&1)
				curr -= A[j];
				
		for (k=0; k<m; k++) {
			for (q=0; q<B[k].a.size(); q++)
				if (!((i>>B[k].a[q])&1))
					break;	
					
				if (q==B[k].a.size()) curr += B[k].p;
		}
		
		ans = max(ans,curr);
	}
	
	printf ("%d\n", ans);
}

int main ()
{
	//freopen ("food.in", "r", stdin);
	
   input ();
   solve ();
   
	return 0;
}
