#include <bits/stdc++.h>
using namespace std;
const int inf = INT_MAX;
const long long int INF = LLONG_MAX;
const long long int mod = 1e9 + 7;
int main() {
  ios_base::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL);
  long long int n, k;
  cin >> n >> k;
  vector<long long int> a(n);
  for (long long int i = 0; i <= n - 1; i++) cin >> a[i];
  map<long long int, long long int> allcur;
  allcur[0] = 0;
  for (long long int i = 0; i <= n - 1; i++) {
    long long int val = 0;
    for (long long int j = 0; j <= k - 1; j++) {
      val += a[i];
      long long int temp = allcur[val];
      if (temp == 0) temp = inf;
      allcur[val] = min(temp, j + 1);
    }
  }
  vector<long long int> cst;
  vector<long long int> prc;
  for (decltype(allcur.begin()) it = allcur.begin(); it != allcur.end(); it++) {
    if (it->second != 0) {
      cst.push_back(it->second);
      prc.push_back(it->first);
    }
  }
  long long int szarr = cst.size();
  long long int q;
  cin >> q;
  while (q--) {
    long long int xval;
    cin >> xval;
    long long int currans = inf;
    for (long long int i = 0; i <= szarr - 1; i++) {
      long long int rem = xval - prc[i];
      if (prc[i] == xval) currans = min(currans, cst[i]);
      if (rem < 0) break;
      if (rem > prc[szarr - 1]) continue;
      auto var = lower_bound(prc.begin(), prc.end(), rem);
      if (*var != rem) continue;
      long long int idx = var - prc.begin();
      if (cst[i] + cst[idx] <= k) {
        currans = min(currans, cst[i] + cst[idx]);
      }
    }
    if (currans == inf)
      cout << "-1\n";
    else
      cout << currans << endl;
  }
  cerr << "Time : " << 1000 * ((double)clock()) / (double)CLOCKS_PER_SEC
       << "ms\n";
  return 0;
}
