#include <bits/stdc++.h>
using namespace std;
long long n, d, b;
int nl[100100], nr[100100];
int find(int *next, int x) {
  if (next[x] == x) return x;
  return next[x] = find(next, next[x]);
}
long long bit[100100];
inline int lowbit(int x) { return x & -x; }
void add(int x, long long y) {
  while (x <= n) {
    bit[x] += y;
    x += lowbit(x);
  }
}
long long sum(int x) {
  long long res = 0;
  while (x > 0) {
    res += bit[x];
    x -= lowbit(x);
  }
  return res;
}
long long get(int x) { return sum(x) - sum(x - 1); }
int make(int x, int t) {
  int nx = 0;
  int l = max(1ll, x - t * d), r = min(n, x + t * d);
  if (sum(r) - sum(l - 1) < b) return 1;
  if (x == t) {
    for (int i = l; i <= r; i = find(nl, i)) {
      int gi = get(i);
      nx += gi;
      if (nx < b) {
        add(i, -get(i));
        nl[i] = i + 1;
        nr[i] = i - 1;
      } else {
        add(i, nx - gi - b);
        break;
      }
    }
  } else {
    for (int i = r; i >= l; i = find(nr, i)) {
      int gi = get(i);
      nx += gi;
      if (nx < b) {
        add(i, -get(i));
        nl[i] = i + 1;
        nr[i] = i - 1;
      } else {
        add(i, nx - gi - b);
        break;
      }
    }
  }
  return 0;
}
int main() {
  scanf("%d%d%d", &n, &d, &b);
  memset(nl, 0, sizeof(nl));
  memset(nr, 0, sizeof(nr));
  for (int i = 1; i <= n; i++) {
    int a;
    scanf("%d", &a);
    add(i, a);
    if (a != 0) {
      nl[i] = i;
      nr[i] = i;
    } else {
      nl[i] = i + 1;
      nr[i] = i - 1;
    }
  }
  int x1 = 0, x2 = 0, l = 1, r = n;
  while (l <= r) {
    if (l == r)
      x1 += make(l, l);
    else if (x1 > x2) {
      x1 += make(l, l);
      x2 += make(r, l);
    } else {
      x2 += make(r, l);
      x1 += make(l, l);
    }
    l++;
    r--;
  }
  printf("%d\n", max(x1, x2));
  return 0;
}
