#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
using ll = long long;

void ins() {}
template<class T,class... Rest>void ins(T& v,Rest&... rest){cin>>v;ins(rest...);}
#define _overload3(_1,_2,_3,name,...) name
#define _rep2(i,n) for(int i=0,_i=(n);i<_i;++i)
#define _rep3(i,a,b) for(int i=(a),_i=(b),_ii=(b)>(a)?1:-1;abs(_i-i)>0;i+=_ii)
#define rep(...) _overload3(__VA_ARGS__,_rep3,_rep2)(__VA_ARGS__)
#define all(f,c,...) (([&](decltype((c)) cccc) { return (f)(begin(cccc), end(cccc), ## __VA_ARGS__); })(c))

signed main() {
  ll N, M, V, P;
  ins(N, M, V, P);

  vector<ll> A(N);
  rep(i, N)
    cin >> A[i];
  all(sort, A); all(reverse, A);

  int ok = -1, ng = N;
  auto f = [&](int mid) {
    if (mid < P) return true;
    if (A[P-1] > A[mid]+M) return false;

    ll tmp = 1LL * ((N-mid)+P-1) * M;
    rep(i, P-1, mid)
      tmp += min(1LL*M, max(0LL, A[mid]+M-A[i]));
    return tmp >= M*V;
  };
  while (abs(ok - ng) > 1) {
    int mid = ok + (ng-ok) / 2;
    (f(mid) ? ok : ng) = mid;
  }
  cout << ok+1 << endl;
  return 0;
}

#include <bits/stdc++.h>
#define rep(i,n) for(int (i)=0;(i)<(n);(i)++)
// const bool debug=true;
const bool debug=false;
#define DEBUG if(debug==true)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const ll MOD = 1000000007;

// 二分探索
// 求める点以上の場合にtrueを返すよう実装する。
template <class V>
V binary_search(V _l, V _r, function<bool(V)> f) {
    V l = _l, r = _r;
    while(r>l) {
        ll mid = (l+r)/2;
        if (f(mid)) {
            r = mid;
        } else {
            l = mid;
        }
        if (l+1==r) {
            if (f(l)) {
                r = l;
            } else {
                l = r;
            }
        }
    }
    return l;
}

/* verified by atcoder agc 041 b
   https://atcoder.jp/contests/agc041/tasks/agc041_b */
vector<ll> a;
ll n,m,v,p;

int main(void) {
    cin.tie(0);
    ios::sync_with_stdio(false);
    cin>>n>>m>>v>>p;
    a.assign(n,0);
    rep(i,n) cin>>a[i];
    sort(begin(a), end(a));
    function<bool(ll)> chk = [&](ll idx) {
        if (a[idx]+m<a[n-p]) {
            return false;
        }
        ll cnt = 0;
        rep(i,n) {
            if (i>n-p||i<=idx) {
                cnt += m;
            }
            else {
                cnt += max(0LL, a[idx]+m-a[i]);
            }
        }
        return cnt >= m*v;
    };
    ll l = binary_search(0LL, n-1, chk);
    cout << n-l << endl;
    return 0;
}
