#include <bits/stdc++.h>
using namespace std;
const int N = 101010;
int n, d, b;
bool isl, isr;
long long a[N];
long long rl, rr, luse, ruse, l, r;
inline void updl() {
  luse += b;
  isl = 1;
}
inline void updr() {
  ruse += b;
  isr = 1;
}
int main() {
  while (~scanf("%d%d%d", &n, &d, &b)) {
    for (int i = (1); i < (n + 1); i++) scanf("%lld", a + i), a[i] += a[i - 1];
    rl = rr = luse = ruse = 0;
    for (int i = (1); i < (n / 2 + 1); i++) {
      l = min((long long)n, 1ll * i * (1 + d));
      r = max(1ll, n + 1 - 1ll * i * (1 + d));
      isl = isr = 0;
      long long sum = n * b - luse - ruse;
      long long lsum = a[l] - luse;
      long long rsum = a[n] - a[r - 1] - ruse;
      if (l < r) {
        if (lsum >= b) updl();
        if (rsum >= b) updr();
      } else {
        long long msum = lsum + rsum - sum;
        if (lsum - msum >= b) updl();
        if (rsum - msum >= b) updr();
        if (isl && isr) {
        } else if (isl) {
          if (rsum >= b) updr();
        } else if (isr) {
          if (lsum >= b) updl();
        } else {
          if (lsum >= b && rsum >= b) {
            if (sum >= 2 * b) {
              updl();
              updr();
            } else {
              if (rl > rr) {
                updl();
              } else {
                updr();
              }
            }
          } else if (lsum >= b) {
            updl();
          } else if (rsum >= b) {
            updr();
          }
        }
      }
      if (!isl) ++rl;
      if (!isr) ++rr;
    }
    printf("%d\n", max(rl, rr));
  }
  return 0;
}
