#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int a[N], pre[N], nxt[N];
void change(int x, int flg) {
  if (flg) {
    nxt[pre[x]] = nxt[x];
    pre[nxt[x]] = pre[x];
  } else {
    nxt[pre[x]] = x;
    pre[nxt[x]] = x;
  }
}
int main() {
  int n, d, b;
  cin >> n >> d >> b;
  for (int i = 1; i <= n; i++) {
    scanf("%d", &a[i]);
    pre[i] = i - 1;
    nxt[i] = i + 1;
  }
  nxt[n + 1] = n + 1;
  int cnt = 0, cnt1 = 0;
  int l = 1, r = n;
  int x = 1, y = n;
  int od = n - n / 2;
  while (l <= r) {
    int s = 0;
    if (l <= od) {
      if (y == 0 || cnt <= cnt1 || r <= od) {
        while (s < b) {
          if (x == n + 1 || x > l + 1LL * l * d) {
            break;
          }
          s += a[x];
          if (s > b)
            a[x] = s - b;
          else {
            a[x] = 0;
            change(x, 1);
            x = nxt[x];
          }
        }
        if (x > y) x = y;
        if (s < b) {
          cnt++;
          if (a[x] == 0) change(x, 0);
          a[x] += s;
        }
        l++;
      }
    }
    if (l > r) break;
    s = 0;
    if (r > od) {
      if (x == n + 1 || cnt1 <= cnt || l > od) {
        while (s < b) {
          if (y == 0 || y < r - (n - r + 1LL) * d) {
            break;
          }
          s += a[y];
          if (s > b)
            a[y] = s - b;
          else {
            a[y] = 0;
            change(y, 1);
            y = pre[y];
          }
        }
        if (y < x) y = x;
        if (s < b) {
          cnt1++;
          if (a[y] == 0) change(y, 0);
          a[y] += s;
        }
        r--;
      }
    }
  }
  cout << max(cnt1, cnt) << endl;
  return 0;
}
