#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 1;
int n, d;
long long b;
long long a[N];
bool check(long long m) {
  int l = 1 + m, r = n - m;
  deque<pair<long long, long long> > q;
  for (int i = 1; i <= n; i++)
    if (a[i]) q.push_back({i, a[i]});
  long long dist = (m + 1) * d;
  while (l <= r) {
    while (!q.empty() && q.front().first + dist < l) q.pop_front();
    while (!q.empty() && q.back().first - dist > r) q.pop_back();
    long long remain = b;
    long long use;
    while (!q.empty() && remain) {
      if (q.front().first - dist > l) return 0;
      use = min(q.front().second, remain);
      remain -= use;
      q.front().second -= use;
      if (q.front().second == 0) q.pop_front();
    }
    if (remain) return 0;
    if (l < r) {
      remain = b;
      while (!q.empty() && remain) {
        if (q.back().first + dist < r) return 0;
        use = min(q.back().second, remain);
        remain -= use;
        q.back().second -= use;
        if (q.back().second == 0) q.pop_back();
      }
      if (remain) return 0;
    }
    l++;
    r--;
    dist += d;
  }
  return 1;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> d >> b;
  for (int i = 1; i <= n; i++) cin >> a[i];
  long long res = n / 2;
  long long l = 0, r = res - 1, m;
  while (l <= r) {
    m = (l + r) / 2;
    if (check(m)) {
      res = m;
      r = m - 1;
    } else
      l = m + 1;
  }
  cout << res;
  return 0;
}
