n, m, v, pp = gets.split.map(&:to_i)
a = gets.split.map(&:to_i).sort_by {|e| -e}

x = (0...n).bsearch do |i|
    p i
    if i < pp
        false
    elsif a[i] + m < a[pp-1]
        true
    else
        s = m * (pp - 1) + m * (n - i)
        (pp-1).upto(i-1) do |j|
            s += [a[i] + m - a[j], m].min
            break if s >= m * v
        end
        s < m * v
    end
end
