#include <bits/stdc++.h>
#pragma GCC optimize("omit-frame-pointer")
#pragma GCC optimize("unroll-loops")
const int MAXINT = 2147483640;
const long long MAXLL = 9223372036854775800LL;
const long long MAXN = 1000000;
const double pi = 3.1415926535897932384626433832795;
using namespace std;
int x1[300000];
long long n, m, k;
int check(int xx) {
  if (xx * 2 >= n) return 1;
  int val = 0;
  long long sum1 = 0;
  long long sum2 = 0;
  long long l, r;
  l = xx + 1 + xx * k;
  r = n - xx - xx * k;
  r = max(r, 0ll);
  l = min(l, n);
  for (int i = 1; i <= l; i++) sum1 += x1[i];
  for (int i = n; i >= r; i--) sum2 += x1[i];
  int l1 = xx + 1;
  int r1 = n - xx;
  int ff = 0;
  while (1) {
    if (ff == 1) ff = 2;
    for (int i = 1; i <= k + val; i++) {
      if (l == n or r == 0) return 1;
      sum1 += x1[++l], sum2 += x1[--r];
    }
    if (ff == 0) ff = 1, val = 1;
    sum1 -= m;
    sum2 -= m;
    if (sum1 < 0 or sum2 < 0) return 0;
    if (l1 >= r1) return 1;
    l1++;
    r1--;
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  srand(time(0));
  int l, r;
  cin >> n >> k >> m;
  for (int i = 1; i <= n; i++) cin >> x1[i];
  l = 0;
  r = n + 1;
  while (l < r) {
    int c = (l + r) / 2;
    if (check(c))
      r = c;
    else
      l = c + 1;
  }
  if (check(l))
    cout << l << endl;
  else
    cout << l + 1 << endl;
  return 0;
}
