#include <bits/stdc++.h>
int N, D, B;
int A[100000];
int A_SUM[100000 + 1];
int ANS;
template <class F>
int bs_max(int b, int e, F const &f) {
  if (!f(b)) return b - 1;
  while (e - b > 1) {
    int m = (b + e) / 2;
    if (f(m)) {
      b = m;
    } else {
      e = m;
    }
  }
  return b;
}
template <class F>
int bs_min(int b, int e, F const &f) {
  return bs_max(b, e, [&f](int x) { return !f(x); }) + 1;
}
int dd(int a, int b) { return (a + b - 1) / b; }
int rL(int p) {
  int a = bs_min(0, N, [&](int t) { return dd(p - t, D) <= (N - p); });
  if (a < 0) a = 0;
  return a;
}
int rR(int p) {
  int a = bs_max(0, N, [&](int t) { return dd(t - p, D) <= (p + 1); });
  if (a >= N) a = N - 1;
  return a + 1;
}
bool g(int n, int p) {
  if (p < (N + 1) / 2) {
    return (((p + 1 - n) * B) <= (A_SUM[rR(p)] - A_SUM[0]));
  } else {
    return (((N - p - n) * B) <= (A_SUM[N] - A_SUM[rL(p)]));
  }
}
bool f(int n) {
  for (int i = n; i < N - n; ++i) {
    if (!g(n, i)) {
      return false;
    }
  }
  return true;
  ;
}
void solve() { ANS = bs_min(0, (N + 1) / 2, f); }
void input();
void output();
int main() {
  input();
  solve();
  output();
}
void input() {
  scanf("%d%d%d", &N, &D, &B);
  A_SUM[0] = 0;
  for (int i = 0; i < N; ++i) {
    scanf("%d\n", &A[i]);
    A_SUM[i + 1] = A_SUM[i] + A[i];
  }
}
void output() { printf("%d\n", ANS); }
