//#include "bits/stdc++.h"
#include <iostream>
#include <vector>
#include <map>
#include <utility>
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <stack>
#include <queue>
#include <set>
#include <unordered_map>
#include <unordered_set>
#include <numeric>
#include <complex>
#include <bitset>
#include <functional>
#include <stack>
#include <regex>
#include <tuple>
#include <iomanip>

#define int long long
#define REP(i, l, r) REPEAT(i,l,r,true) // [l, r)
#define rep(i, n) REP(i,0,n)           // [0, n)
#define REPEAT(i, l, r, condition) for(int i=(condition)?l:r-1;(condition)?i<r:i>=l;(condition)?++i:--i) // false<-[l, r)->true
#define all(e) e.begin(),e.end()
#define rall(e) e.rbegin(),e.rend()
#define pb push_back
#define fs first
#define sc second
#define show(...) cerr<<#__VA_ARGS__<<" = ";_DEBUG(__VA_ARGS__)
#define showlr(n, l, r) cerr<<#n<<" = ";for(int i=l;i<r;i++){cerr<<n[i]<<", ";}cerr<<endl // [l, r)

#define YN(condition) puts((condition)?"YES":"NO")
#define Yn(condition) puts((condition)?"Yes":"No")
#define yn(condition) puts((condition)?"yes":"no")
#define YES puts("YES")
#define Yes puts("Yes")
#define yes puts("yes")
#define NO  puts("NO")
#define No  puts("No")
#define no  puts("no")

#define case(i) printf("Case #%lld: ",i)

using namespace std;

using vi=vector< int >;
using pint=pair< int, int >;

struct io {
  io() {
    cin.tie(0);
    ios::sync_with_stdio(false);
    cout.tie(0);
    cout << fixed << setprecision(20);
  }
} io;

template< class T >
istream &operator>>(istream &is, vector< T > &v) {
  for(T &e:v)is >> e;
  return is;
}

template< class T >
ostream &operator<<(ostream &os, vector< T > v) {
  os << "{";
  for(T &e:v)os << e << (v.size() - (int) (&e - &v[0]) > 1 ? ", " : "");
  os << "}";
  return os;
}

void _DEBUG() {}

template< typename H, typename... T >
void _DEBUG(H a, T...b) {
  cerr << a << (sizeof...(b) ? "," : "\n");
  _DEBUG(b...);
}

inline void in() {}

template< typename H, typename... T >
void in(H &a, T &... b) {
  cin >> a;
  in(b...);
}

inline void out() {}

template< typename H, typename... T >
void out(H a, T... b) {
  cout << a << (sizeof...(b) ? " " : "\n");
  out(b...);
}

template< class T >
void resz(int n, T &v) { v.resize(n); }

template< class H, class... T >
void resz(int n, H &a, T &... b) {
  a.resize(n);
  resz(n, b...);
}

template< typename V, typename H >
void resize(vector< V > &v, const H a) { v.resize(a); }

template< typename V, typename H, typename... T >
void resize(vector< V > &v, const H &a, const T... b) {
  v.resize(a);
  for(auto &v:v) resize(v, b...);
}

const int INF = 1LL << 55;
const int MOD = 1000000007;
const double EPS = 1e-8;

int N, M;
vi m;
vi cumsum_arrow(1e5 + 1);
vi cumsum_dist(1e5 + 1);
int Q;

signed main() {

  in(N, M);
  m.resize(M);
  in(m);
  m.push_back(N + 1);
  sort(begin(m), end(m));
  m.erase(unique(begin(m), end(m)), end(m));
  for(int i = 1; i < m.size(); i++) {
    int sa = m[i] - m[i - 1] - 1;
    cumsum_arrow[sa]++;
    cumsum_dist[sa] += sa;
  }

  REP(i, 1, 1e5 + 1) {
    cumsum_arrow[i] += cumsum_arrow[i - 1];
    cumsum_dist[i] += cumsum_dist[i - 1];
  }

  //showlr(cumsum_arrow, 0, 11);
  //showlr(cumsum_dist, 0, 11);
  in(Q);

  while(Q--) {
    int l;
    in(l);
    int lo = 0, hi = 1e5 + 1;

    while(hi - lo > 1) {
      int med = (hi + lo) / 2;
      // 矢の長さがmedのときのコスト
      int cost = (cumsum_dist[1e5] - cumsum_dist[med - 1]) - (cumsum_arrow[1e5] - cumsum_arrow[med - 1]) * (med - 1) + m[0] - 1;

      // show(hi, lo, cost, cost <= l);

      // costが2 lが1
      if(cost <= l) {
        hi = med;
      } else {
        lo = med;
      }
    }
    if(hi == 1e5 + 1) {
      out(-1);
      continue;
    }
    out(hi);
  }
  return 0;
}




Measured memory_bytes: 6072