#include <bits/stdc++.h>
using namespace std;
#define int long long
#define ff first
#define ss second
#define all(x) (x).begin(), (x).end()
#define sz(x) (int)(x.size())
#define PI 3.1415926535897932384626433832795
int MOD=1e9+7;
int powmod(int a,int l, int md){int res=1;while(l){if(l&1)res=res*a%md;l/=2;a=a*a%md;}return res;}
int binpow(int a,int l){int res=1;while(l){if(l&1)res=res*a;l/=2;a=a*a;}return res;}
typedef long long ll; typedef vector<ll> vi; typedef pair<ll, ll> ii; typedef vector<ii> vii;
#define pb push_back
int __set(int b, int i) {return b|(1<<i);} //set ith bit
int __unset(int b, int i) {return b&(~(1UL<<i));}
int __check(int b, int i) {return b&(1<<i);} //returns 0 if ith bit is 0
int mulmod(int a, int b, int md) {return ((a%md)*(b%md))%md;}
int addmod(int a, int b, int md) {return (a+b)%md;}
int submod(int a, int b, int md) {return (((a-b)%md)+md)%md;}
int divmod(int a, int b, int md) {return mulmod(a, powmod(b, md-2, md), md);} //if md is prime;
const ll inf = 0xFFFFFFFFFFFFFFFL; //very large number
priority_queue<int, vector<int>, greater<int> > pq; //for min priority_queue
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
clock_t time_p=clock();
void time()
{
    time_p=clock()-time_p;
    cerr<<"Time Taken : "<<(float)(time_p)/CLOCKS_PER_SEC<<"\n";
}
// int n;
// vector<vi> g(200010);
// int parent[200010];
// int vis[200010];
// int st[200010];
// void dfs(int u) {
// 	vis[u]=1;
// 	int ss=0;
// 	for(int i = 0; i < sz(g[u]); i++) {
// 		int v=g[u][i];
// 		if(!vis[v]) {
// 			parent[v]=u;
// 			dfs(v);
// 			ss += st[v];
// 		}
// 	}
// 	st[u]=ss+1;
// }
int n,m,v,p;
int a[100010];
int check(int id) {
	if(n-id<=p) return 1;
	if(id+1>=v) {
		int pp = n-(upper_bound(a,a+n,a[id]+m)-a)+1;
		if(pp <= p) return 1;
		return 0;
	} else {
		// cout<<"in"<<endl;
		int b[n];
		for(int i = 0; i < n; i++) {
			b[i]=a[i];
		}
		b[id]+=m;
		int cnt=m;
		for(int i = 0; i < n; i++) {
			if(cnt>=m*v) break;
			if(i==id) continue;
			if(b[i] > b[id]) {
				// cout<<"in11"<<endl;
				b[i] += min(m*v-cnt,m);
				cnt += min(m*v-cnt,m);
			} else {
				int val=min({m*v-cnt,b[id]-b[i],m});
				b[i]+=val;
				cnt+=val;
			}
		}
		// for(int i = 0; i < n; i++)
		// 	cout<<b[i]<<" ";
		// cout<<endl;
		// cout<<cnt<<" "<<m*v<<endl;
		for(int i = n-1; i >= 0; i--) {
			// if(i==id) continue;
			if(b[i]-a[i]==m) continue;
			if(cnt>=m*v) break;
			int val=min({m*v-cnt,m-(b[i]-a[i])});
			b[i]+=val;
			cnt+=val;
		}
		// for(int i = 0; i < n; i++)
		// 	cout<<b[i]<<" ";
		// cout<<endl;
		int pos=0;
		for(int i = 0; i < n; i++) {
			if(b[i] > b[id])
				pos++;
		}
		if(pos < p) return 1;
		return 0;
		// int vv=v-(id+1);
		// int k = n-vv;
		// if(vv < p) {
		// 	cout<<vv<<" "<<k<<endl;
		// 	int pp = n-(upper_bound(a+id+1,a+k,a[id]+m)-a)+1;
		// 	cout<<pp<<endl;
		// 	if(pp <= p) return 1;
		// 	return 0;
		// } else {
		// 	int nn=k-(id+1)+1;
		// 	int occ=lower_bound(a,a+n,a[k])-a;
		// 	if(occ-(id+1)+1 > m%nn) {

		// 	} else {
		// 		if(a[id]+m >= a[k]+m/nn+1)
		// 	}
		// }
	}
}
int bn(int lo, int hi) {
	// cout<<lo<<" "<<hi<<endl;
	if(lo==hi) {
		if(check(lo)) return lo;
		return lo+1;
	}
	int mid=(lo+hi)/2;
	if(check(mid)) {
		// cout<<"in1 "<<a[mid]<<endl;
		return bn(lo,mid);
	} else {
		// cout<<"in2 "<<a[mid]<<endl;
		return bn(mid+1,hi);
	}
}
signed main(void)
{
	IOS;
	// cin>>n;
	// vii edge;
	// for(int i = 0; i < n-1; i++) {
	// 	int u,v;
	// 	cin>>u>>v; u--; v--;
	// 	edge.pb({u,v});
	// 	g[u].pb(v);
	// 	g[v].pb(u);
	// }
	// parent[0]=0;
	// dfs(0);
	// long double ad=n/2.0;
	// long double sub=0.0;
	// for(int i = 0; i < n-1; i++) {
	// 	if(parent[edge[i].ff]==edge[i].ss) {
	// 		int s1=st[edge[i].ff],s2=n-s1;
	// 		sub += ();
	// 	} else {

	// 	}
	// }
	cin>>n>>m>>v>>p;
	for(int i = 0; i < n; i++)
		cin>>a[i];
	sort(a,a+n);
	// for(int i = 0; i < n; i++)
	// 	cout<<a[i]<<" ";
	// cout<<endl;
	// check(2);
	int pos=bn(0,n-1);
	// cout<<pos<<endl;
	cout<<n-pos<<endl;
	time();
	return 0;
}

Measured memory_bytes: 1792