#include<cstdio>
#include<cstring>
#define INF 1000000000
#define MAXN 202
int s,d;
int from[MAXN+1],q[MAXN+1],v[MAXN+1][MAXN+1],f[MAXN+1][MAXN+1],c[MAXN+1][MAXN+1],viz[MAXN+1];
inline int bfs(){
int st,dr,p,x;
st=0;
dr=1;
q[0]=s;
memset(from,0,sizeof(from));
memset(viz,0,sizeof(viz));
viz[s]=1;
while((st<dr)&&(viz[d]==0)){
for(p=1;p<=v[q[st]][0];p++){
x=v[q[st]][p];
if((viz[x]==0)&&(c[q[st]][x]>f[q[st]][x])){
from[x]=q[st];
viz[x]=1;
q[dr++]=x;
}
}
st++;
}
return viz[d];
}
int main(){
freopen("tribut.in","r",stdin);
freopen("tribut.out","w",stdout);
int n,m,i,x,ans,min,p,t,k,j,test,tests;
scanf("%d",&tests);
for(test=1;test<=tests;test++){
memset(f,0,sizeof(f));
memset(c,0,sizeof(c));
memset(v,0,sizeof(v));
scanf("%d%d",&n,&m);
s=0;
d=n+m+1;
for(i=1;i<=n;i++){
scanf("%d",&c[s][i]);
v[s][++v[s][0]]=i;
v[i][++v[i][0]]=s;
}
for(i=1;i<=m;i++){
scanf("%d%d",&k,&c[i+n][d]);
v[d][++v[d][0]]=i+n;
v[i+n][++v[i+n][0]]=d;
for(j=1;j<=k;j++){
scanf("%d",&x);
v[x][++v[x][0]]=i+n;
v[i+n][++v[i+n][0]]=x;
c[x][i+n]=INF;
}
}
ans=0;
while(bfs())
for(p=1;p<=v[d][0];p++){
x=v[d][p];
if((viz[x])&&(c[x][d]>f[x][d])){
from[d]=x;
min=INF;
i=d;
while(i!=s){
if(min>c[from[i]][i]-f[from[i]][i])
min=c[from[i]][i]-f[from[i]][i];
i=from[i];
}
ans+=min;
i=d;
while(i!=s){
f[from[i]][i]+=min;
f[i][from[i]]-=min;
i=from[i];
}
}
}
printf("%d\n", ans);
}
return 0;
}