#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100100;
struct node {
  int pos, num;
};
int n, d, b, a[MAXN];
bool check(int mid) {
  deque<node> dq;
  for (int i = 1; i <= n; ++i)
    if (a[i]) dq.push_back(node{i, a[i]});
  for (int t = mid + 1; t <= n / 2; ++t) {
    int cur = 0;
    while (cur < b) {
      node e = dq.front();
      dq.pop_front();
      int x = min(b - cur, e.num);
      if ((long long)t * d < abs(e.pos - t)) return false;
      e.num -= x;
      cur += x;
      if (e.num) dq.push_front(e);
    }
    cur = 0;
    while (cur < b) {
      node e = dq.back();
      dq.pop_back();
      int x = min(b - cur, e.num);
      if ((long long)t * d < abs(e.pos - (n - t + 1))) return false;
      e.num -= x;
      cur += x;
      if (e.num) dq.push_back(e);
    }
  }
  return true;
}
int main() {
  scanf("%d%d%d", &n, &d, &b);
  for (int i = 1; i <= n; ++i) scanf("%d", a + i);
  int L = 0, R = n / 2;
  while (L < R) {
    int mid = (L + R) / 2;
    if (check(mid))
      R = mid;
    else
      L = mid + 1;
  }
  printf("%d\n", L);
}
