#include <bits/stdc++.h>
using namespace std;
const int M = 1e5 + 5;
struct sd {
  int id, r;
} ask[M << 6];
bool operator<(sd a, sd b) { return a.r == b.r ? a.id > b.id : a.r < b.r; }
int st[20][M][2], que[M], nxt[M], blo[M][2], jmp[M][2], ans[M], n, w, q, siz,
    tot;
void in() {
  scanf("%d%d%d", &n, &w, &q);
  for (int i = 1; i <= n; ++i)
    scanf("%d", &que[i]), st[0][i][0] = st[0][i][1] = que[i];
  for (int i = 1, k; i <= q; ++i)
    scanf("%d", &k), ask[++tot] = (sd){i - q, w - k};
}
void up(int v) {
  (nxt[v] == n + 1 || (nxt[v] - 1) % siz == 0)
      ? (jmp[v][0] = 1, jmp[v][1] = v)
      : (jmp[v][0] = jmp[nxt[v]][0] + 1, jmp[v][1] = jmp[nxt[v]][1]);
}
void ac() {
  for (; siz * siz * siz < 6 * n; ++siz)
    ;
  for (int j = 1; (1 << j) <= n; ++j)
    for (int i = 1; i + (1 << j) <= n + 1; ++i)
      st[j][i][0] = min(st[j - 1][i][0], st[j - 1][i + (1 << j - 1)][0]),
      st[j][i][1] = max(st[j - 1][i][1], st[j - 1][i + (1 << j - 1)][1]);
  for (int i = n; i >= 1; --i) {
    nxt[i] = i + 1, blo[i][0] = blo[i][1] = que[i], up(i);
    for (int j = i + 1, mn = que[i], mx = que[i]; j <= n && (j - 1) % siz > 0;
         ++j)
      mn = min(mn, que[j]), mx = max(mx, que[j]), ask[++tot] = (sd){i, mx - mn};
  }
  sort(ask + 1, ask + 1 + tot);
  for (int i = 1, pos, cst, mn, mx, k, to, maxn, minn; i <= tot; ++i)
    if (ask[i].id <= 0)
      for (pos = 1, cst = -1; pos <= n; ans[ask[i].id + q] = cst) {
        cst += jmp[pos][0], pos = jmp[pos][1], mn = blo[pos][0],
                            mx = blo[pos][1], to = pos, k = 0;
        for (; pos + (1 << k) <= n + 1 &&
               (maxn = max(mx, st[k][pos][1])) -
                       (minn = min(mn, st[k][pos][0])) <=
                   ask[i].r;
             ++k)
          mx = maxn, mn = minn;
        for (; k--;)
          if (to + (1 << k) <= n + 1 &&
              (maxn = max(mx, st[k][to][1])) - (minn = min(mn, st[k][to][0])) <=
                  ask[i].r)
            mx = maxn, mn = minn, to += 1 << k;
        blo[pos][0] = mn, blo[pos][1] = mx, pos = nxt[pos] = to;
      }
    else
      for (nxt[pos = ask[i].id]++, mn = (pos - 1) / siz * siz + 1; pos >= mn;
           --pos)
        up(pos);
  for (int i = 1; i <= q; ++i) printf("%d\n", ans[i]);
}
int main() {
  in();
  ac();
}
