#pragma warning(disable:4996) #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include //#pragma comment(linker, "/STACK:202400000,202400000") //不需要申请系统栈 using namespace std; /* int a[25], n, sji; bool vis[25]; bool ans[4201]; void dfs(int num, int sum) { if (ans[sum + 2000])return; ans[sum + 2000] = true; if (num >= n)return; int i; for (i = 0; i < n; i++) { if (!vis[i]) { vis[i] = true; dfs(num + 1, sum + a[i]); dfs(num + 1, sum - a[i]); vis[i] = false; } } } int main() { int t, i, j, m, ji, res, cy, tp; scanf("%d", &t); while (t--) { scanf("%d", &n); for (i = 0; i < n; i++) { scanf("%d", &a[i]); } scanf("%d", &m); memset(vis, false, sizeof(vis)); memset(ans, false, sizeof(ans)); dfs(0, 0); while (m--) { scanf("%d", &sji); if (sji <= 2000 && sji >= 0 && ans[2000 + sji])puts("YES"); else puts("NO"); } } return 0; } */ int a[25], n, sji; bool vis[25]; bool dp[4201][2]; int main() { int t, i, j, m, ji, res, cy, tp; scanf("%d", &t); while (t--) { scanf("%d", &n); for (i = 0; i < n; i++) { scanf("%d", &a[i]); } scanf("%d", &m); memset(vis, false, sizeof(vis)); memset(dp, false, sizeof(dp)); dp[2000][0] = true; for (i = 0; i < n; i++) { for (j = 0; j <= 4000; j++) { if (dp[j][i % 2]) { dp[j + a[i]][(i + 1) % 2] = true; dp[j - a[i]][(i + 1) % 2] = true; } } for (j = 0; j <= 4000; j++) { if (dp[j][i % 2])dp[j][(i + 1) % 2] = true; dp[j][i % 2] = false; } } while (m--) { scanf("%d", &sji); if (sji <= 2000 && sji >= 0 && (dp[2000 + sji][1] || dp[2000 + sji][0]))puts("YES"); else puts("NO"); } } return 0; }