n, m, v, p = gets.split.map(&:to_i);
a = gets.split.map(&:to_i).sort.reverse;
border = a[p - 1];
ans = p;
p.upto(n - 1){|i|
	if p - 1 + n - i < v
		vremain = (v - (p - 1 + n - i)) * m
		need = 0
		(p - 1).upto(i - 1){|y|
			need += border - a[y]
		}
		if need < vremain
			vremain -= need
			border += vremain / (i - p + 1)
			border += (vremain % (i - p + 1) >= 1 ? 1 : 0)
		end
	end
	if a[i] + m >= border
		ans += 1
	else break
}
puts ans