#include <bits/stdc++.h>
using ll = int64_t;
ll n, d, b;
std::vector<ll> a;
std::vector<ll> t;
void upd(ll p, ll val) {
  for (ll i = p; i < n; i = i | (i + 1)) t[i] += val;
}
ll _q(ll p) {
  ll res = 0;
  for (ll i = p; i >= 0; i = (i & (i + 1)) - 1) res += t[i];
  return res;
}
ll q(ll l, ll r) {
  if (l < 0) l = 0;
  if (r > n - 1) r = n - 1;
  ll rq = _q(r);
  ll lq = l == 0 ? 0 : _q(l - 1);
  return rq - lq;
}
ll front(ll m) {
  ll us = 0, res = 0;
  for (int i = 0; i < (n + 1) / 2; i++) {
    ll av = std::min(q(0, i + d * (i + 1)), m) - us;
    if (av < b)
      res++;
    else
      us += b;
  }
  return res;
}
ll back(ll m) {
  ll us = 0, res = 0;
  for (int i = n - 1; i >= (n + 1) / 2; i--) {
    ll av = std::min(q(i - d * (n - i), n - 1), m) - us;
    if (av < b)
      res++;
    else
      us += b;
  }
  return res;
}
inline ll func(ll m) { return front(m) - back(n * b - m); }
inline ll tot(ll m) { return std::max(front(m), back(n * b - m)); }
int main() {
  std::cin >> n >> d >> b;
  a.resize(n);
  t.assign(n, 0);
  for (ll i = 0; i < n; i++) {
    std::cin >> a[i];
    upd(i, a[i]);
    ;
  }
  ll l = 0, r = n * b;
  while (r - l > 1) {
    ll m = (r - l) / 2 + l;
    if (func(m) >= 0)
      l = m;
    else
      r = m;
  }
  ll res = std::min(tot(l), tot(r));
  std::cout << res << std::endl;
}
