#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
const int maxn = 5000 + 5;
const int INF = 0x3f3f3f3f;
const int Max = 1e7 + 5;
int n, k;
int val[maxn];
int has[Max];
vector<int> vec[20 + 5];
int main() {
  scanf("%d%d", &n, &k);
  for (int i = 0; i < n; i++) {
    scanf("%d", &val[i]);
  }
  vector<pair<int, int> > vec, v;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j <= k; j++) {
      v.push_back({val[i] * j, j});
    }
  }
  sort(v.begin(), v.end());
  set<int> s;
  for (int i = 0; i < v.size(); i++) {
    if (s.find(v[i].first) == s.end())
      vec.push_back(v[i]), s.insert(v[i].first);
  }
  int query;
  scanf("%d", &query);
  while (query--) {
    int x;
    scanf("%d", &x);
    int ans = INF;
    int left = 0, right = vec.size() - 1;
    while (right > left) {
      if (vec[left].first + vec[right].first == x) {
        if (vec[left].second + vec[right].second <= k)
          ans = min(ans, vec[left].second + vec[right].second);
        if (vec[left].first == 100 && vec[right].first == 5000) cout << "!!!\n";
        left++, right--;
      } else if (vec[left].first + vec[right].first > x)
        right--;
      else
        left++;
    }
    for (auto o : vec)
      if (o.first == x) ans = min(ans, o.second);
    printf("%d\n", ans == INF ? -1 : ans);
  }
  return 0;
}
