#include <bits/stdc++.h>
using namespace std;
int A[100005];
int L[100005], R[100005];
vector<pair<int, int> > vec[100005];
int n, d, b;
bool solve(int x) {
  int s = x, t = n - x - 1;
  if (s > t) return true;
  priority_queue<pair<int, int>, vector<pair<int, int> >,
                 greater<pair<int, int> > >
      que;
  for (int i = 0; i <= t; i++) {
    for (int j = 0; j < vec[i].size(); j++) {
      pair<int, int> p = vec[i][j];
      que.push(p);
    }
    if (i >= s) {
      int zan = b;
      while (zan > 0 && !que.empty()) {
        pair<int, int> p = que.top();
        que.pop();
        if (p.first >= i) {
          if (p.second > zan) {
            p.second -= zan;
            que.push(p);
            zan = 0;
            break;
          } else {
            zan -= p.second;
          }
        }
      }
      if (zan != 0) return false;
    }
  }
  return true;
}
int main() {
  scanf("%d %d %d", &n, &d, &b);
  for (int i = 0; i < n; i++) {
    scanf("%lld", &A[i]);
    int f = i / (d + 1);
    L[i] = f;
    int x = (n - i - 1) / (d + 1);
    R[i] = n - x - 1;
    vec[L[i]].push_back(pair<int, int>(R[i], A[i]));
  }
  int l = -1, r = n + 1;
  while (r - l > 1) {
    int m = (l + r) / 2;
    if (solve(m))
      r = m;
    else
      l = m;
  }
  printf("%d\n", r);
  return 0;
}
