#include <bits/stdc++.h>
using namespace std;
const int NMAX = 100010;
int N, D, B;
int V[NMAX], leftSum[NMAX], rightSum[NMAX];
int computeLeft(int kStud) {
  int prefixSum = 0;
  int answer = 0;
  for (int i = 1; i <= (N + 1) / 2; ++i) {
    int right = i + 1ll * D * i <= N ? i + D * i : N;
    if (leftSum[right] - prefixSum >= B && prefixSum + B <= kStud) {
      prefixSum += B;
    } else {
      ++answer;
    }
  }
  return answer;
}
int computeRight(int kStud) {
  int suffixSum = 0;
  int answer = 0;
  for (int i = N; i > (N + 1) / 2; --i) {
    int left = i - 1ll * D * (N - i + 1) >= 1 ? i - D * (N - i + 1) : 1;
    if (rightSum[left] - suffixSum >= B && suffixSum + B <= kStud) {
      suffixSum += B;
    } else {
      ++answer;
    }
  }
  return answer;
}
int main() {
  cin >> N >> D >> B;
  for (int i = 1; i <= N; ++i) {
    cin >> V[i];
  }
  for (int i = 1; i <= N; ++i) {
    leftSum[i] = leftSum[i - 1] + V[i];
    rightSum[N - i + 1] = rightSum[N - i + 2] + V[N - i + 1];
  }
  int currAnswer = 0;
  for (int i = 30; i >= 0; --i) {
    if (computeLeft(currAnswer | (1 << i)) -
            computeRight(N * B - (currAnswer | (1 << i))) >=
        0) {
      currAnswer |= 1 << i;
    }
  }
  cout << min(max(computeLeft(currAnswer), computeRight(N * B - currAnswer)),
              max(computeLeft(currAnswer + 1),
                  computeRight(N * B - currAnswer - 1)))
       << '\n';
  return 0;
}
