#include <bits/stdc++.h>
using namespace std;
int A[10000];
map<int, int> M;
map<int, bool> vis;
bool MM(int v, int k) {
  if (M.find(v) == M.end()) M[v] = 1000000000;
  if (M[v] > k) {
    M[v] = k;
    return true;
  }
  return false;
}
int main() {
  int N, K;
  scanf("%d %d ", &N, &K);
  for (int i = 0; i < (int)(N); i++) scanf("%d ", &A[i]);
  M[0] = 0;
  for (int i = 0; i < (int)(N); i++) {
    vis.clear();
    priority_queue<int> q;
    q.push(0);
    while (q.size()) {
      int v = -q.top();
      q.pop();
      if (vis[v]) continue;
      vis[v] = true;
      if (M[v] + 1 <= K && v + A[i] <= 200000100)
        if (MM(v + A[i], M[v] + 1)) q.push(-(v + A[i]));
    }
  }
  int Q;
  scanf("%d ", &Q);
  for (int q = 0; q < (int)(Q); q++) {
    int x;
    scanf("%d ", &x);
    int Erg = 2 * 1000000000;
    for (int a = 0; a < (int)(N); a++)
      for (int k = (1); k < (int)(K + 1); k++)
        Erg =
            min(Erg, k + ((M.find(x - A[a] * k) == M.end()) ? 1000000000
                                                            : M[x - A[a] * k]));
    printf("%d\n", Erg > K ? -1 : Erg);
  }
  return 0;
}
