#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5;
int n, d, b;
int a[maxn], a2[maxn];
bool Check(int lim) {
  memcpy(a2, a, sizeof a);
  int good_left = (n + 1 >> 1) - lim;
  int cur = 0, sum = 0, next = 0;
  for (int i = 0; i < (n + 1 >> 1); ++i) {
    if (!good_left) break;
    while (next < n && (next - i) <= (i + 1) * (long long)d) {
      sum += a2[next++];
    }
    if (sum >= b) {
      int k = b;
      while (k) {
        if (k >= a2[cur]) {
          k -= a2[cur];
          a2[cur++] = 0;
        } else {
          a2[cur] -= k;
          k = 0;
        }
      }
      sum -= b;
      if (--good_left == 0) {
        break;
      }
    }
  }
  if (good_left) return false;
  cur = n - 1;
  sum = 0;
  next = n - 1;
  good_left = (n >> 1) - lim;
  for (int i = n - 1; i >= (n + 1 >> 1); --i) {
    if (!good_left) break;
    while (next >= 0 && (i - next) <= (n - i) * (long long)d) {
      sum += a2[next--];
    }
    if (sum >= b) {
      int k = b;
      while (k) {
        if (k >= a2[cur]) {
          k -= a2[cur];
          a2[cur--] = 0;
        } else {
          a2[cur] -= k;
          k = 0;
        }
      }
      sum -= b;
      if (--good_left == 0) {
        break;
      }
    }
  }
  if (good_left) return false;
  return true;
}
int main(void) {
  scanf("%d%d%d", &n, &d, &b);
  for (int i = 0; i < n; ++i) {
    scanf("%d", a + i);
  }
  int low = 0, high = (n + 1 >> 1) + 1;
  while (high - low >> 1) {
    int mid = low + high >> 1;
    if (Check(mid - 1)) {
      high = mid;
    } else {
      low = mid;
    }
  }
  printf("%d\n", low);
  return 0;
}
