local function lower_bound(ary, x)
  if(x <= ary[1]) then return 1 end
  local num = #ary
  if(ary[num] < x) then return num + 1 end
  local min, max = 1, num
  while(1 < max - min) do
    local mid = (min + max) // 2
    if(ary[mid] < x) then
      min = mid
    else
      max = mid
    end
  end
  return max
end
local function getComb(n, k)
  local ret = 1
  for i = 1, k do
    ret = ret * (n + 1 - i)
    ret = ret // i
  end
  return ret
end
local n, a, b = io.read("*n", "*n", "*n")
local t = {}
for i = 1, n do t[i] = io.read("*n") end
table.sort(t)
local sum = 0
for i = 1, a do
  sum = sum + t[n + 1 - i]
end
print(string.format("%.8f", sum / a))
local minval = t[n + 1 - a]
local minvalcount = 0
local usecount = 0
for i = 1, n do
  if(t[i] == minval) then
    minvalcount = minvalcount + 1
    if(n + 1 - a <= i) then
      usecount = usecount + 1
    end
  end
end
if minval ~= t[n] then
  print(string.format("%d", getComb(minvalcount, usecount)))
else
  local ret = 0
  for i = a, b do
    ret = ret + getComb(minvalcount, i)
  end
  print(string.format("%d",ret))
end
