#include <bits/stdc++.h>
using namespace std;
int solve(vector<long long> &vec, long long rooms, long long b, long long d) {
  long long ans = 0;
  for (long long t = 0, c = 0, overflow = 0, dd = 0; t < rooms; t++) {
    dd += d;
    vec[t] += overflow;
    for (long long j = c + 1; j < min((long long)vec.size(), t + dd + 1); j++) {
      vec[t] += vec[j];
      vec[j] = 0;
    }
    if (vec[t] < b) {
      ans++;
      overflow = vec[t];
    } else
      overflow = vec[t] - b;
    c = t + dd;
  }
  return ans;
}
int n, d, b;
vector<long long> a;
int fp(long long esum, bool first = true) {
  vector<long long> as(n, 0);
  long long sum = 0;
  if (!first) reverse(a.begin(), a.end());
  for (int i = 0; i < a.size(); i++) {
    sum += a[i];
    as[i] = a[i];
    if (sum > esum) {
      as[i] += (esum - sum);
      break;
    }
  }
  if (!first) reverse(a.begin(), a.end());
  int ans = solve(as, (n + (first ? 1 : 0)) / 2, b, d);
  return ans;
}
int main() {
  cin >> n >> d >> b;
  a = vector<long long>(n);
  for (int i = 0; i < n; i++) cin >> a[i];
  long long total = n * b;
  long long l = 0, r = total;
  while (r - l > 1) {
    long long temp = ((r + l) >> 1);
    if (fp(temp) > fp(total - temp, false))
      l = temp;
    else
      r = temp;
  }
  if (fp(l) <= fp(total - l, false)) r = l;
  int answer = max(fp(r), fp(total - r, false));
  if (r != 0) answer = min(answer, max(fp(r - 1), fp(total - r + 1, false)));
  cout << answer;
  return 0;
}
