#include <bits/stdc++.h>
using namespace std;
const int N = 24 + 5;
int T, n, r[N], c[N], dis[N],
cnt[N]; //r[i]表示i时刻至少需要工作的人数,c[i]表示i时刻能够开始工作的人数
struct Edge {
int u, v, w;
};
vector<Edge> g[N];
bool inq[N];
void add(int u, int v, int w) {
g[u].push_back({u, v, w});
}
void clear() {
for (int i = 0; i < N; i ++)
g[i].clear();
}
bool spfa() {
queue<int> q;
for (int i = 0; i < N; i ++)
q.push(i), dis[i] = 0, inq[i] = true, cnt[i] = 1;
while (!q.empty()) {
int u = q.front();
q.pop();
inq[u] = false;
for (int i = 0; i < g[u].size(); i++) {
int v = g[u][i].v, w = g[u][i].w;
if (dis[v] < dis[u] + w) {
dis[v] = dis[u] + w;
cnt[v] = cnt[u] + 1;
if (cnt[v] > N)
return true;
if (!inq[v])
q.push(v), inq[v] = true;
}
}
}
return false;
}
bool check(int s24) {
clear();
for (int d = 1; d <= 24; d++)
add(d - 1, d, 0), add(d, d - 1, -c[d]);
for (int d = 1; d <= 8; d++)
add(16 + d, d, r[d] - s24);
for (int d = 8; d <= 24; d++)
add(d - 8, d, r[d]);
add(0, 24, s24);
return !spfa();
}
int main() {
scanf("%d", &T);
while (T--) {
memset(r, 0, sizeof(r));
memset(c, 0, sizeof(c));
for (int i = 1; i <= 24; i++)
scanf("%d", &r[i]);
scanf("%d", &n);
for (int i = 1, d; i <= n; i++) {
scanf("%d", &d);
d++;
c[d]++;
}
int left = 0, right = n, ans = -1;
while (left <= right) {
int mid = (left + right) / 2;
if (check(mid)) {
right = mid - 1;
ans = mid;
} else
left = mid + 1;
}
if (ans != -1)
printf("%d\n", ans);
else
puts("No Solution");
}
return 0;
}