n,m,v,p = gets.split.map &:to_i
as = gets.split.map &:to_i

as_count = {}

as.each{ |a|
	if as_count[a] == nil then
		as_count[a] = 1
	else
		as_count[a] += 1
	end
}

as_key = as_count.keys.sort

sec = as.sort{|a,b| b <=> a}[p-1]
sec_index = as_key.index{ |x| x == sec }

count = as.count { |x| x == sec }

result = 0
#res = {}

totals = {}
count_sum = 0

sec_index.downto(0){ |i|
	if i == sec_index then
		totals[as_key[i]] = 0
	else
		count_sum += as_count[as_key[i + 1]]

		totals[as_key[i]] = totals[as_key[i + 1]] + (as_key[i + 1] - as_key[i]) * count_sum
	end
}

#print totals
#puts


as_key.each_with_index{ |a, i|
=begin
	if res[a] == true then
		result += 1
	elsif res[a] == false then
		next
	end
=end
	if sec <= a then
		result += as_count[a]
#		res[a] = true
		next
	end
	
	diff = sec - a

#	a_index = as_key.bsearch_index{ |x| x >= a }

=begin
	total = 0

	as_key[a_index .. sec_index].each{ |aa|
		total += as_count[aa] * (aa - a)
	}
=end
	
	if [diff, (totals[a] * 1.0 / (n - v)).ceil].max <= m then
		result += as_count[a]
#		res[a] = true
		next
	end

#	res[a] = false
}

puts result