#include <iostream>
#include <cmath>
#include <cstring>

using namespace std;

const int N = 110, M = N * N;

int n;
bool f[N][M];
/*
假设,物品放在左侧,重量显示在右侧
假设我们已经走了i-1个石头,且当前可以称j千克现在到了第i块石头
那我可以做的事情是什么呢?
1.我不拿这块石头f[i][j] = true;
2.我拿这块石头
2.1将这块石头放到右侧f[i][j + x] = true;
2.2将这块石头放在左侧f[i][abs(j - x)] = true;

这里利用了拓扑图出边的思路。
就是在当前节点考虑可以由当前节点到达哪些节点
 */
int main() {
  while (cin >> n) {
    //初始化
    memset(f, 0, sizeof f);
    for (int i = 0; i <= n; i ++ ) f[i][0] = true;

    for (int i = 1; i <= n; i ++ ) {
      int x; cin >> x;
      for (int j = 0; j <= 10000; j ++ ) {
        if (f[i - 1][j]) {
          f[i][j] = true;//不选第i个石头
          f[i][j + x] = true;//将第i个石头放在右侧
          f[i][abs(j - x)] = true;//讲第i个石头放在左侧
        }
      }
    }

    int m; cin >> m;
    while (m -- ) {
      int t; cin >> t;
      if (t > 10000 || !f[n][t]) puts("NO");
      else puts("YES");
    }
  }

  return 0;
}