#include <bits/stdc++.h>
long n, k, sum, q;
struct money {
  long b;
  long c;
  money(long _b, long _c) : b(_b), c(_c) {}
  bool operator<(const money& m) const { return c < m.c; }
};
std::unordered_map<long, std::vector<money>> sums;
long long s[5000][20];
int main() {
  std::cin.sync_with_stdio(false);
  std::cin >> n >> k;
  for (int i = 0; i < n; ++i) {
    std::cin >> s[i][0];
    for (int j = 1; j < k; ++j) {
      s[i][j] = s[i][0] * (j + 1);
    }
  }
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < k; ++j) {
      if (sums.find(s[i][j]) == sums.end()) {
        sums[s[i][j]] = {money(i, j + 1)};
      } else {
        sums[s[i][j]].push_back(money(i, j + 1));
      }
    }
  }
  for (auto it = sums.begin(); it != sums.end(); ++it) {
    std::sort((*it).second.begin(), (*it).second.end());
  }
  long Q;
  std::cin >> Q;
  for (int t = 0; t < Q; ++t) {
    std::cin >> q;
    int min = 21;
    for (int i = 0; i < n; ++i) {
      for (int j = 0; j < k; ++j) {
        if (q == s[i][j]) {
          if (min > j + 1) {
            min = j + 1;
          }
        }
        auto it = sums.find(q - s[i][j]);
        if (it != sums.end()) {
          for (auto vit = (*it).second.begin(); vit != (*it).second.end();
               ++vit) {
            if ((*vit).b != i || (*vit).c != j + 1) {
              if (min > j + 1 + (*vit).c && j + 1 + (*vit).c <= k) {
                min = j + 1 + (*vit).c;
              }
              break;
            }
          }
        }
      }
    }
    if (min != 21) {
      std::cout << min << std::endl;
    } else {
      std::cout << "-1" << std::endl;
    }
  }
  return 0;
}
