#include <bits/stdc++.h>
const int maxn = 100010, maxq = 100010, maxs = 5000000;
int n, w, q, x[maxn];
int T[19][maxn][2];
int min(int a, int b) { return a < b ? a : b; }
int max(int a, int b) { return a > b ? a : b; }
int b, nxt[maxn], mv[maxn][2], f[maxn][2], ans[maxq];
void upd(int i) {
  if (nxt[i] == n || nxt[i] % b == 0)
    f[i][0] = 1, f[i][1] = i;
  else
    f[i][0] = f[nxt[i]][0] + 1, f[i][1] = f[nxt[i]][1];
}
struct item {
  int i, k;
  bool operator<(const item& it) const {
    return k < it.k || k == it.k && i > it.i;
  }
} A[maxs];
int main() {
  scanf("%d%d%d", &n, &w, &q);
  for (int i = 0; i < n; i++)
    scanf("%d", x + i), T[0][i][0] = T[0][i][1] = x[i];
  for (int k = 1; 1 << k <= n; k++)
    for (int i = 0; i + (1 << k) <= n; i++)
      T[k][i][0] = min(T[k - 1][i][0], T[k - 1][i + (1 << k - 1)][0]),
      T[k][i][1] = max(T[k - 1][i][1], T[k - 1][i + (1 << k - 1)][1]);
  while (b * b * b < n * 6) b++;
  int tot = 0;
  for (int i = n; i--;) {
    nxt[i] = i + 1;
    mv[i][0] = mv[i][1] = x[i];
    upd(i);
    for (int j = i + 1, mn = x[i], mx = x[i]; j < n && j % b > 0; j++) {
      mn = min(mn, x[j]);
      mx = max(mx, x[j]);
      A[tot++] = (item){i, mx - mn};
    }
  }
  for (int i = 0, k; i < q; i++)
    scanf("%d", &k), A[tot++] = (item){i - q, w - k};
  std::sort(A, A + tot);
  int cnt = 0;
  for (int i = 0; i < tot; i++) {
    item it = A[i];
    if (it.i < 0) {
      int j = 0, s = -1;
      while (j < n) {
        s += f[j][0];
        j = f[j][1];
        int mn = mv[j][0], mx = mv[j][1], mn2, mx2, k = 0, l = j;
        for (;
             j + (1 << k) <= n &&
             (mx2 = max(mx, T[k][j][1])) - (mn2 = min(mn, T[k][j][0])) <= it.k;
             k++)
          mn = mn2, mx = mx2;
        while (k--)
          if (l + (1 << k) <= n &&
              (mx2 = max(mx, T[k][l][1])) - (mn2 = min(mn, T[k][l][0])) <= it.k)
            mn = mn2, mx = mx2, l += 1 << k;
        mv[j][0] = mn, mv[j][1] = mx;
        j = nxt[j] = l;
      }
      ans[it.i + q] = s;
    } else {
      int j = it.i, bl = j / b * b;
      for (nxt[j]++; j >= bl; j--) upd(j);
    }
  }
  for (int i = 0; i < q; i++) printf("%d\n", ans[i]);
}
