#include <bits/stdc++.h>
using namespace std;
class sTree {
 public:
  int size;
  vector<pair<pair<int, int>, int>> t;
  vector<bool> tc;
  vector<int> a;
  sTree() {}
  sTree(int n) {
    size = n - 1;
    t.resize(4 * n);
    tc.resize(4 * n);
    a.resize(n);
  }
  void build() { build(1, 0, size); }
  void modifyAssighn(int l, int r, int val) {
    modifyAssighn(1, 0, size, l, r, val);
  }
  int sum(int l, int r) { return sum(1, 0, size, l, r); }

 private:
  void build(int v, int tl, int tr) {
    if (tr == tl)
      t[v] = make_pair(make_pair(a[tl], 1), 0);
    else {
      int tm = (tl + tr) >> 1;
      build(v * 2, tl, tm);
      build(v * 2 + 1, tm + 1, tr);
      t[v].first.first = t[v * 2].first.first + t[v * 2 + 1].first.first;
      t[v].first.second = t[v * 2].first.second + t[v * 2 + 1].first.second;
    }
  }
  void modifyAssighn(int v, int tl, int tr, int l, int r, int val) {
    if (l > r) return;
    if (l == tl && r == tr) {
      t[v].second = val;
      t[v].first.first = val * t[v].first.second;
      tc[v] = true;
    } else {
      int tm = (tl + tr) >> 1;
      push2(v);
      modifyAssighn(v * 2, tl, tm, l, min(tm, r), val);
      modifyAssighn(v * 2 + 1, tm + 1, tr, max(tm + 1, l), r, val);
      t[v].first.first = t[v * 2].first.first + t[v * 2 + 1].first.first;
    }
  }
  void push2(int v) {
    if (tc[v]) {
      t[v * 2].first.first = t[v].second * t[v * 2].first.second;
      t[v * 2].second = t[v].second;
      tc[v * 2] = true;
      t[v * 2 + 1].first.first = t[v].second * t[v * 2 + 1].first.second;
      t[v * 2 + 1].second = t[v].second;
      tc[v * 2 + 1] = true;
      t[v].second = 0;
      tc[v] = false;
    }
  }
  int sum(int v, int tl, int tr, int l, int r) {
    if (l > r) return 0;
    if (l == tl && r == tr)
      return t[v].first.first;
    else {
      int tm = (tl + tr) >> 1;
      push2(v);
      return sum(v * 2, tl, tm, l, min(tm, r)) +
             sum(v * 2 + 1, tm + 1, tr, max(tm + 1, l), r);
    }
  }
};
int main() {
  int n, k;
  scanf("%d%d", &n, &k);
  vector<int> banknote(n);
  map<int, bool> bnote;
  for (int i = n - 1; i >= 0; i--) {
    scanf("%d", &banknote[i]);
    bnote[banknote[i]] = true;
  }
  int q;
  scanf("%d", &q);
  for (int i = 0; i < q; i++) {
    int sum;
    int ans = k + 1;
    scanf("%d", &sum);
    for (int j = 0; j < n; j++) {
      if (sum < banknote[j]) continue;
      for (int l = 1; l <= min(sum / banknote[j], k); l++) {
        int sum2 = sum - l * banknote[j];
        if (sum2 == 0 && l < ans) ans = l;
        for (int g = 1; g <= k - l; g++) {
          if (sum2 % g == 0) {
            if (bnote.find(sum2 / g) == bnote.end()) continue;
            if (g + l < ans) ans = g + l;
          }
        }
      }
    }
    printf("%d\n", ans > k ? -1 : ans);
  }
  return 0;
}
