#include <bits/stdc++.h>
const int MOD = 1e9 + 7;
const int N = 5e3 + 15;
const int INF = (1 << 31) - 10;
const int letter = 130;
using namespace std;
int n, q, k;
int dis[N];
struct node {
  int value, sum;
} ps[N * 20];
bool cmp(node a, node b) {
  if (a.value != b.value)
    return a.value < b.value;
  else
    return a.sum < b.sum;
}
int main() {
  while (scanf("%d%d", &n, &k) != EOF) {
    for (int i = 0; i < n; i++) scanf("%d", &dis[i]);
    scanf("%d", &q);
    int num = 1, tc;
    ps[0].value = 0, ps[0].sum = 0;
    for (int i = 0; i < n; i++) {
      for (int j = 1; j <= k; j++) {
        ps[num].value = dis[i] * j, ps[num++].sum = j;
      }
    }
    sort(ps, ps + num, cmp);
    while (q--) {
      int min1 = INF;
      scanf("%d", &tc);
      for (int i = 0; i < num; i++) {
        int bs = tc - ps[i].value;
        if (bs < 0)
          break;
        else if (bs == 0)
          min1 = min(min1, ps[i].sum);
        else {
          int l = 0, r = num - 1;
          int ans = INF;
          while (l <= r) {
            int mid = (l + r) >> 1;
            if (ps[mid].value == bs) {
              if (ps[i].sum + ps[mid].sum <= k) ans = min(ans, ps[mid].sum);
              r = mid - 1;
            }
            if (bs < ps[mid].value) r = mid - 1;
            if (bs > ps[mid].value) l = mid + 1;
          }
          if (ans == INF) continue;
          min1 = min(min1, ans + ps[i].sum);
        }
      }
      if (min1 == INF)
        cout << -1 << endl;
      else
        cout << min1 << endl;
    }
  }
  return 0;
}
