#include <bits/stdc++.h>
using namespace std;
template <class T>
ostream& operator<<(ostream& fout, const vector<T>& vec) {
  for (size_t i = 0; i < vec.size(); ++i) {
    fout << vec[i] << ' ';
  }
  return fout;
}
template <class T>
istream& operator>>(istream& fin, vector<T>& vec) {
  for (size_t i = 0; i < vec.size(); ++i) {
    cin >> vec[i];
  }
  return fin;
}
const int MANY = 200000005;
int n, k;
int a[5000];
uint8_t d[MANY + 5];
int solve(int x) {
  int best = 255;
  for (int i = 0; i < int(n); ++i) {
    for (int j = 0; j < int(k + 1); ++j) {
      if (x < j * a[i]) break;
      best = min(best, j + int(d[x - j * a[i]]));
    }
  }
  if (best > k) return -1;
  return best;
}
int main() {
  scanf("%d%d", &n, &k);
  memset(d, -1, sizeof d);
  for (int i = 0; i < int(n); ++i) {
    scanf("%d", &a[i]);
  }
  for (int i = 0; i < int(n); ++i) {
    for (int j = 0; j < int(k + 1); ++j) {
      if (a[i] * j > MANY) break;
      d[a[i] * j] = min(d[a[i] * j], (uint8_t)j);
    }
  }
  int q;
  scanf("%d", &q);
  for (int i = 0; i < int(q); ++i) {
    int x;
    scanf("%d", &x);
    printf("%d\n", solve(x));
  }
  return 0;
}
