#include <bits/stdc++.h>
using namespace std;
const int inf = 1000000000;
const int mod = 1000000009;
const int N = 5005;
int a[N];
map<int, int> first[22], second[22];
void add(int val, int k, int where) {
  if (first[k].find(val) == first[k].end()) {
    first[k][val] = where;
  } else {
    if (second[k].find(val) == second[k].end()) {
      second[k][val] = where;
    }
  }
}
int main() {
  int n, k;
  cin >> n >> k;
  for (int i = 0; i < n; ++i) {
    scanf("%d", &a[i]);
    for (int rep = 0; rep <= k; rep++) {
      add(rep * a[i], rep, i);
    }
  }
  int q, val;
  cin >> q;
  while (q--) {
    scanf("%d", &val);
    int answer = -1;
    for (int i = 0; i < n; ++i) {
      for (int rep = 0; rep <= k; rep++) {
        int tmp = val - rep * a[i];
        if (tmp == 0) {
          if (answer == -1 || rep < answer) {
            answer = rep;
          }
        }
        for (int nuevo = 0; nuevo + rep <= k; nuevo++) {
          bool ok = false;
          if (first[nuevo].find(tmp) != first[nuevo].end() &&
              first[nuevo][tmp] != i) {
            ok = true;
          }
          if (second[nuevo].find(tmp) != second[nuevo].end() &&
              second[nuevo][tmp] != i) {
            ok = true;
          }
          if (ok && (answer == -1 || nuevo + rep < answer)) {
            answer = nuevo + rep;
          }
        }
      }
    }
    cout << answer << endl;
  }
  return 0;
}
