local mfl = math.floor
local n, m = io.read("*n", "*n")
local v, p = io.read("*n", "*n")
local a = {}
for i = 1, n do
  a[i] = io.read("*n")
end
table.sort(a)

local function solve(x)
  local currank = n + 1 - x
  local rem = m * (n - v)
  if m < a[n + 1 - p] - a[x] then
    return false
  end
  local need = 0
  local base = a[x]
  for i = x + 1, n + 1 - p do
    need = need + a[i] - base
  end
  -- print(x, need)
  return need <= rem
end

local min, max = 1, n
while 1 < max - min do
  local mid = mfl((min + max) / 2)
  if solve(mid) then
    max = mid
  else
    min = mid
  end
end
print(n + 1 - max)
