#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5, S = 50, M = 17, Q = (1 << 21) + 1;
int n, w, q, z, a[N], k[N], k2[N], bi[N][S + 1], sm[N][S + 1], f[M][N], g[M][N],
    fw[N];
int fa[N], s[N][2], su[N], cl[N], cs, gg[N];
bool is[N], r[N];
vector<int> v[N];
map<int, int> ans;
char o[20], c, in[Q], *iss = in, *it = in, out[Q], *os = out, *ot = out + Q - 1;
void R(int &n) {
  for (n = 0; (c = (it == iss ? it = (iss = in) + fread(in, 1, Q, stdin),
                                (iss == it ? EOF : *iss++) : *iss++)) < '0' ||
              c > '9';)
    ;
  for (; c <= '9' && c >= '0';
       c = (it == iss ? it = (iss = in) + fread(in, 1, Q, stdin),
                        (iss == it ? EOF : *iss++) : *iss++))
    n = n * 10 + c - 48;
}
void W(int n) {
  if (!n)
    (*os++ = '0', os == ot ? fwrite(out, 1, os - out, stdout), os = out : 0);
  for (c = 0; n; n /= 10) o[++c] = n % 10 + 48;
  for (; c;)
    (*os++ = o[c--], os == ot ? fwrite(out, 1, os - out, stdout), os = out : 0);
  (*os++ = '\n', os == ot ? fwrite(out, 1, os - out, stdout), os = out : 0);
}
void Cl(int x) {
  for (; cl[++cs] = x, is[x]; x = fa[x])
    ;
  for (; cs;)
    (x = cl[cs--], (r[x] ? r[x] = 0, swap(s[x][0], s[x][1]), r[s[x][0]] ^= 1,
                    r[s[x][1]] ^= 1 : 0));
}
void ro(int x) {
  int y = fa[x], z = (x == s[fa[x]][1]);
  s[y][z] = s[x][!z];
  fa[s[y][z]] = y;
  fa[x] = fa[y];
  is[x] = is[y] ? s[fa[x]][(y == s[fa[y]][1])] = x : 0;
  s[x][!z] = y;
  fa[y] = x;
  (su[y] = 1 + su[s[y][0]] + su[s[y][1]]);
  is[y] = 1;
}
void sp(int x) {
  for (Cl(x); is[x]; ro(x))
    if (is[fa[x]])
      (x == s[fa[x]][1]) == (fa[x] == s[fa[fa[x]]][1]) ? ro(fa[x]) : ro(x);
  (su[x] = 1 + su[s[x][0]] + su[s[x][1]]);
}
void ac(int x) {
  for (int y = 0; x; (su[x] = 1 + su[s[x][0]] + su[s[x][1]]), y = x, x = fa[x])
    sp(x), is[s[x][1]] = 0, is[y] = 1, s[x][1] = y;
}
int gr(int x) {
  ac(x);
  sp(x);
  for (; s[x][0]; x = s[x][0])
    ;
  return x;
}
void link(int x, int y) {
  (ac(x), sp(x), r[x] ^= 1);
  fa[x] = y;
}
void cut(int x, int y) {
  int t = gr(x);
  r[x] ^= 1;
  ac(y);
  sp(y);
  is[x] = fa[x] = s[y][0] = 0;
  (su[y] = 1 + su[s[y][0]] + su[s[y][1]]);
  (ac(t), sp(t), r[t] ^= 1);
}
int calc(int k) {
  int tot = 0, ma, mi;
  for (int i = 1; i <= n;) {
    ac(i);
    sp(i);
    tot += su[i] - 1;
    i = gr(i);
    if (i > n) return tot;
    ma = 0;
    mi = 1e9;
    for (int j = gg[n + 1 - i]; ~j; j--)
      if (i + (1 << j) <= n + 1 && max(ma, f[j][i]) - min(mi, g[j][i]) <= k)
        ma = max(ma, f[j][i]), mi = min(mi, g[j][i]), i += 1 << j;
    tot++;
  }
  return tot;
}
int main() {
  R(n);
  R(w);
  R(q);
  for (int i = 1, _e = n; i <= _e; i++) R(a[i]);
  for (int i = 1, _e = q; i <= _e; i++) R(k[i]), k2[i] = k[i] = w - k[i];
  sort(k2 + 1, k2 + q + 1);
  for (int i = 1, _e = n; i <= _e; i++) {
    bi[i][0] = sm[i][0] = f[0][i] = g[0][i] = a[i];
    z = 0;
    for (int j = 1, _e = min(S, n - i); j <= _e; j++) {
      bi[i][j] = max(bi[i][j - 1], a[i + j]);
      sm[i][j] = min(sm[i][j - 1], a[i + j]);
      int wz = lower_bound(k2 + 1, k2 + q + 1, bi[i][j] - sm[i][j]) - k2;
      if (wz > z) v[wz].push_back(i);
      z = wz;
    }
  }
  for (int j = 1, _e = M - 1; j <= _e; j++)
    for (int i = 1, _e = n - (1 << j) + 1; i <= _e; i++)
      f[j][i] = max(f[j - 1][i], f[j - 1][i + (1 << j - 1)]),
      g[j][i] = min(g[j - 1][i], g[j - 1][i + (1 << j - 1)]);
  for (int i = 1, _e = n + 1; i <= _e; i++) fa[i] = i + 1, su[i] = 1;
  fa[n + 1] = 0;
  for (int i = 2, _e = n; i <= _e; i++) gg[i] = gg[i >> 1] + 1;
  for (int i = 1, _e = q; i <= _e; i++) {
    for (auto j : v[i]) {
      cut(j, j + fw[j] + 1);
      for (; fw[j] < S && bi[j][fw[j] + 1] - sm[j][fw[j] + 1] <= k2[i];)
        fw[j]++;
      if (fw[j] < S) link(j, j + fw[j] + 1);
    }
    ans[k2[i]] = calc(k2[i]);
  }
  for (int i = 1, _e = q; i <= _e; i++) W(ans[k[i]] - 1);
  fwrite(out, 1, os - out, stdout), os = out;
}
