#define CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
int require;
int target[101];
int owned[101];
int n;
int m;
int solinhkientronggoi[101];
int linhkiengoikhuyenmai[101][101];
int pricegoikhuyenmai[101];
int giamuale[101];
int t;
int mint = 100000;
int remaining() {
int cost = 0;
for (int i = 1; i <= require; i++) {
if (owned[target[i]] == 0) {
cost += giamuale[target[i]];
}
}
return cost;
}
bool done() {
for (int i = 1; i <= require; i++) {
if (owned[target[i]] == 0)return false;
}
return true;
}
void addpack(int k,int a) {
for (int i = 1; i <= solinhkientronggoi[k]; i++) {
owned[linhkiengoikhuyenmai[k][i]] += a;
}
}
void backtrack(int k, int cur) {
if (k == m + 1) {
if (mint > cur +remaining() ) {
mint = cur + remaining();
}
return;
}
if (done()) {
mint = cur;
return;
}
if (cur > mint) return; //dieu kien cat nhanh
for (int i = 0; i < 2; i++) {
if (i == 0) {
backtrack(k + 1, cur);
}
else if (i == 1) {
addpack(k, 1);
backtrack(k + 1, cur + pricegoikhuyenmai[k]);
addpack (k, -1);
}
}
}
int main() {
cin >> t;
for (int tc = 1; tc <= t; tc++) {
cin >> n;
for (int i = 1; i <=n; i++) {
cin>>giamuale[i];
}
cin >> m;
for (int i = 1; i <= m; i++) {
cin >> pricegoikhuyenmai[i];
cin >> solinhkientronggoi[i];
for (int p = 1; p <= solinhkientronggoi[i]; p++) {
cin >> linhkiengoikhuyenmai[i][p];
}
}
for (int i = 1; i <= 100; i++) {
owned[i] = 0;
}
cin >> require;
for (int i = 0; i < require; i++) {
cin >> target[i];
}
mint = 100000;
backtrack(1, 0);
cout << mint << endl;
}
return 0;
}