#include using namespace std; const int MaxN = 18; const int MOD = 1e9 + 7; const int INF = 1e9; int n, m, a[MaxN], mx = 0; long long dp[1 << MaxN], foo[1 << MaxN]; void solve() { scanf("%d%d", &n, &m); assert (n != 0); mx = max(mx, n); for (int i = 0; i < 1 << n; ++i) { dp[i] = 1LL << 60; foo[i] = 1LL << 60; } for (int i = 0; i < n; ++i) { scanf("%d", &a[i]); foo[1 << i] = a[i]; } int total = 0; for (int i = 0; i < m; ++i) { long long c, k; scanf("%lld%lld", &c, &k); int mask = 0; for (int j = 0; j < k; ++j) { int x; scanf("%d", &x); assert (1 <= x && x <= n); x--; mask |= 1 << x; } foo[mask] = min(foo[mask], c); } for (int mask = (1 << n) - 1; mask >= 0; --mask) { for (int bit = 0; bit < n; ++bit) { if (mask & (1 << bit)) { foo[mask ^ (1 << bit)] = min(foo[mask ^ (1 << bit)], foo[mask]); } } } dp[0] = 0; for (int mask = 0; mask < 1 << n; ++mask) { for (int smask = (mask - 1) & mask; ; smask = (smask - 1) & mask) { if (dp[mask] > dp[smask] + foo[mask ^ smask]) { dp[mask] = dp[smask] + foo[mask ^ smask]; } if (smask == 0) { break; } } } cout << dp[(1 << n) - 1] << '\n'; } int main() { // freopen("input.txt", "r", stdin); int t; scanf("%d", &t); for (int it = 1; it <= t; ++it) { solve(); } assert (1 <= t && t <= 10 && mx <= 12 || 1 <= t && t <= 1000 && mx <= 8 || t == 1 && 1 <= n && n <= 18); return 0; }