#include <bits/stdc++.h>
using namespace std;
const int limit = 1000000;
long long int n, d, B;
int a[limit];
int expected[2];
int howmany[2];
int b[limit];
int sol[2];
long long int block;
int nextposri(int i) {
  while (i + (block + 1) * d <= n - (block + 1)) block++;
  while (i + block * d > n - block) block--;
  return n - block;
}
int nextposle(int i) {
  while (i - (block + 1) * d >= 1 + (block + 1)) block++;
  while (i - block * d < 1 + block) block--;
  return 1 + block;
}
int main() {
  ios::sync_with_stdio(false);
  cin >> n >> d >> B;
  int med = (n + 1) / 2;
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
    if (i <= med)
      howmany[0] += a[i];
    else
      howmany[1] += a[i];
  }
  expected[0] = med * B;
  expected[1] = (n - med) * B;
  if (expected[0] < howmany[0]) {
    long long int d = howmany[0] - expected[0];
    block = 0;
    for (int i = med; i >= 1; i--) {
      if (a[i] >= d) {
        b[nextposri(i)] += d;
        a[i] -= d;
        break;
      } else {
        b[nextposri(i)] += a[i];
        d -= a[i];
        a[i] = 0;
      }
    }
  } else if (expected[1] < howmany[1]) {
    long long int d = howmany[1] - expected[1];
    block = 0;
    for (int i = med + 1; i <= n; i++) {
      if (a[i] >= d) {
        b[nextposle(i)] += d;
        a[i] -= d;
        break;
      } else {
        b[nextposle(i)] += a[i];
        d -= a[i];
        a[i] = 0;
      }
    }
  }
  {
    block = 0;
    for (int i = 1; i <= med; i++) b[nextposle(i)] += a[i];
  }
  {
    block = 0;
    for (int i = n; i >= med + 1; i--) b[nextposri(i)] += a[i];
  }
  {
    int c = 0;
    for (int i = 1; i <= med; i++) {
      c += b[i];
      if (c < B)
        sol[0]++;
      else
        c -= B;
    }
  }
  {
    int c = 0;
    for (int i = n; i >= med + 1; i--) {
      c += b[i];
      if (c < B)
        sol[1]++;
      else
        c -= B;
    }
  }
  cout << max(sol[0], sol[1]) << endl;
}
