#include <bits/stdc++.h>
inline int getint();
inline void putint(int);
template <class type>
inline type min(type, type);
template <class type>
inline type max(type, type);
template <class type>
inline void swap(type&, type&);
int a[8192];
std::map<int, int> b;
int main() {
  int n, k, q, x, y;
  int ans;
  n = getint(), k = getint();
  for (int i = 1; i <= n; i++) a[i] = getint();
  b[0] = 0;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= k; j++)
      if (!b.count(a[i] * j))
        b[a[i] * j] = j;
      else
        b[a[i] * j] = min(b[a[i] * j], j);
  q = getint();
  for (int i = 1; i <= q; i++) {
    ans = 0x7FFFFFFF;
    x = getint();
    for (int i = 1; i <= n; i++)
      for (int j = 1; j <= k; j++)
        if (a[i] * j <= x) {
          y = x - a[i] * j;
          if (b.count(y)) ans = min(ans, b[y] + j);
        }
    if (ans == 0x7FFFFFFF || ans > k)
      puts("-1");
    else
      putint(ans);
  }
  return 0;
}
inline int getint() {
  register int num = 0;
  register char ch;
  do ch = getchar();
  while (ch < '0' || ch > '9');
  do num = num * 10 + ch - '0', ch = getchar();
  while (ch >= '0' && ch <= '9');
  return num;
}
inline void putint(int num) {
  char stack[16];
  register int top = 0;
  if (num == 0) stack[top = 1] = '0';
  for (; num; num /= 10) stack[++top] = num % 10 + '0';
  for (; top; top--) putchar(stack[top]);
  putchar('\n');
}
template <class type>
inline type min(type a, type b) {
  return a < b ? a : b;
}
template <class type>
inline type max(type a, type b) {
  return a > b ? a : b;
}
template <class type>
inline void swap(type& a, type& b) {
  type t = a;
  a = b;
  b = t;
}
