#include <bits/stdc++.h>
using namespace std;
int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); }
const int MAXN = 100000;
const int MAXQ = 100000;
const int MAXLG = 16;
int n, sz, nq;
int x[MAXN];
int qsz[MAXQ], qans[MAXQ];
int rmn[MAXN][MAXLG + 1], rmx[MAXN][MAXLG + 1];
int steponelim;
int stepone[MAXN], steponemn[MAXN], steponemx[MAXN];
int stepmanylim;
int stepmany[MAXN], stepmanycost[MAXN];
priority_queue<pair<int, int>> pq;
vector<int> lst;
int dst[MAXN];
void init() {
  steponelim = pow(n, 2 / 3.0);
  stepmanylim = pow(n, 1 / 3.0);
  for (int i = (0); i < (n); ++i) rmn[i][0] = rmx[i][0] = x[i];
  for (int k = (1); k <= (MAXLG); ++k)
    for (int i = (0); i <= (n - (1 << k)); ++i)
      rmn[i][k] = min(rmn[i][k - 1], rmn[i + (1 << (k - 1))][k - 1]),
      rmx[i][k] = max(rmx[i][k - 1], rmx[i + (1 << (k - 1))][k - 1]);
  for (int i = (0); i < (n); ++i)
    stepone[i] = i + 1, steponemn[i] = x[i], steponemx[i] = x[i];
  for (int i = (0); i < (n); ++i)
    stepmany[i] = min(n, i + stepmanylim), stepmanycost[i] = stepmany[i] - i;
  pq = priority_queue<pair<int, int>>();
  for (int i = (0); i < (n - 1); ++i)
    pq.push(make_pair(sz - max(steponemx[i], x[stepone[i]]) +
                          min(steponemn[i], x[stepone[i]]),
                      i));
  lst.clear();
  for (int i = (0); i < (n); ++i) dst[i] = -1;
}
void update(int idx, int csz) {
  while (stepone[idx] < n && stepone[idx] - idx <= steponelim &&
         max(steponemx[idx], x[stepone[idx]]) -
                 min(steponemn[idx], x[stepone[idx]]) <=
             sz - csz) {
    steponemx[idx] = max(steponemx[idx], x[stepone[idx]]),
    steponemn[idx] = min(steponemn[idx], x[stepone[idx]]), ++stepone[idx];
  }
  if (stepone[idx] < n && stepone[idx] - idx <= stepmanylim)
    pq.push(make_pair(sz - max(steponemx[idx], x[stepone[idx]]) +
                          min(steponemn[idx], x[stepone[idx]]),
                      idx));
  lst.clear();
  for (int at = idx; at <= idx + stepmanylim;
       at = at == n ? INT_MAX : stepone[at])
    lst.push_back(at);
  dst[idx] = 0;
  stepmany[idx] = lst.back();
  stepmanycost[idx] = ((int)(lst).size()) - 1;
  for (int at = idx - 1; at >= 0 && at >= idx - stepmanylim; --at) {
    int to = stepone[at];
    if (dst[to] == -1)
      continue;
    else
      dst[at] = dst[to] + 1;
    while (lst.back() - at > stepmanylim) lst.pop_back();
    stepmany[at] = lst.back();
    stepmanycost[at] = dst[at] + ((int)(lst).size()) - 1;
  }
  for (int at = idx; at >= 0 && at >= idx - stepmanylim; --at) dst[at] = -1;
}
int calc(int csz) {
  while (!pq.empty() && pq.top().first >= csz) {
    int idx = pq.top().second;
    pq.pop();
    update(idx, csz);
  }
  int at = 0, ret = 0;
  while (at < n) {
    while (stepone[at] < n && stepone[at] - at <= steponelim &&
           max(steponemx[at], x[stepone[at]]) -
                   min(steponemn[at], x[stepone[at]]) <=
               sz - csz) {
      steponemx[at] = max(steponemx[at], x[stepone[at]]),
      steponemn[at] = min(steponemn[at], x[stepone[at]]), ++stepone[at];
    }
    if (stepmany[at] != at) {
      ret += stepmanycost[at];
      at = stepmany[at];
    } else if (stepone[at] - at <= steponelim) {
      ++ret;
      at = stepone[at];
    } else {
      int cmn = x[at], cmx = x[at], cto = at + 1;
      for (int k = MAXLG; k >= 0; --k)
        if (cto + (1 << k) <= n &&
            max(cmx, rmx[cto][k]) - min(cmn, rmn[cto][k]) <= sz - csz)
          cmx = max(cmx, rmx[cto][k]), cmn = min(cmn, rmn[cto][k]),
          cto += 1 << k;
      ++ret;
      at = cto;
    }
  }
  return ret;
}
pair<int, int> o[MAXQ];
void solve() {
  init();
  for (int i = (0); i < (nq); ++i) o[i] = make_pair(-qsz[i], i);
  sort(o, o + nq);
  for (int i = (0); i < (nq); ++i) {
    int csz = -o[i].first, id = o[i].second;
    qans[id] = calc(csz) - 1;
  }
}
void run() {
  scanf("%d%d%d", &n, &sz, &nq);
  for (int i = (0); i < (n); ++i) scanf("%d", &x[i]);
  for (int i = (0); i < (nq); ++i) scanf("%d", &qsz[i]);
  solve();
  for (int i = (0); i < (nq); ++i) printf("%d\n", qans[i]);
}
int main() {
  run();
  return 0;
}
