#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline T abs(T a) {
  return ((a < 0) ? -a : a);
}
template <typename T>
inline T sqr(T a) {
  return a * a;
}
const int N = 10010;
int n, k, q;
long long d[N];
vector<long long> vs[N];
int main() {
  cin >> n >> k;
  for (int i = int(0); i < int(n); ++i) {
    cin >> d[i];
    for (int j = 1; j <= k; ++j) vs[j].push_back(d[i] * j);
  }
  for (int j = 1; j <= k; ++j) {
    sort((vs[j]).begin(), (vs[j]).end());
    vs[j].erase(unique((vs[j]).begin(), (vs[j]).end()), vs[j].end());
  }
  cin >> q;
  for (int qcnt = int(0); qcnt < int(q); ++qcnt) {
    long long v;
    cin >> v;
    int ans = 2 * k;
    for (int cnt = 1; cnt <= k; ++cnt) {
      if (binary_search((vs[cnt]).begin(), (vs[cnt]).end(), v)) {
        ans = cnt;
        break;
      }
      bool good = false;
      for (int i = int(0); i < int(n); ++i) {
        for (int j = 1; j <= cnt; ++j) {
          if (d[i] * j > v) break;
          long long left = v - d[i] * j;
          if (binary_search((vs[cnt - j]).begin(), (vs[cnt - j]).end(), left)) {
            good = true;
            break;
          }
        }
        if (good) break;
      }
      if (good) {
        ans = cnt;
        break;
      }
    }
    if (ans > k) ans = -1;
    cout << ans << endl;
  }
  return 0;
}
