/*
TASK: food
LANG: C
*/
#include <stdio.h>
#include <string.h>
#define INF 1000000000
#define MAXN 180
#define min(a,b) (((a)<(b))?(a):(b))

 int source,sink;
 int n,m,total;
 int cap[MAXN][MAXN];
 int a[MAXN][MAXN];
 int h[MAXN];
 int prev[MAXN];
 int marked[MAXN];
 int q[MAXN];
 int s,e;

 int main ()
  {
   int i,j,pom;
   scanf("%d%d",&n,&m);
   source=n+m+1;
   sink=n+m+2;
   for (i=1;i<=n;i++)
    scanf("%d",&cap[m+i][sink]);
   for (i=1;i<=m;i++)
    {
     scanf("%d",&cap[source][i]);
     total+=cap[source][i];
     for (scanf("%d",&j);j>0;j--)
      {
       scanf("%d",&pom);
       cap[i][m+pom]=INF;
      }
    }
   while (1)
    {
     e=1;
     q[e]=source;
     h[source]=INF;
     memset(marked,0,sizeof(marked));
     marked[source]=1;
     for (s=1;s<=e && marked[sink]==0;s++)
      {
       pom=q[s];
       for (i=1;i<=n+m+2;i++)
        if (cap[pom][i]>a[pom][i] && marked[i]==0)
         {
          marked[i]=1;
          q[++e]=i;
          h[i]=min(cap[pom][i]-a[pom][i],h[pom]);
          prev[i]=pom;
         }
      }
     if (marked[sink]==0)break;
     total-=h[sink];
     i=sink;
     while (i!=source)
      {
       j=prev[i];
       a[j][i]+=h[sink];
       a[i][j]-=h[sink];
       i=j;
      }
    }
   printf("%d\n",total);
   return 0;
  }
 
