import Data.List

main = do
  li <- getLine
  let [n,a,b] = map read $ words li
  li <- getLine
  let vs = map read $ words li
  let (avmax,num) = compute a b vs
  print avmax
  print num

{-
vsを降順にソートし、価値と個数に整理しておく。
価値の大きい方からa個は必ず使う。

通常、価値が最大よりも少ないものを含めているならば、
それを増やすことは平均を下げるので、a個より多く選ぶ必然性はない。
例外は例4のように、価値最大のものがaより多くk個ある場合、
a個、a+1個、…、min k b個の間でいくつ選んでも同じ価値になる。
また、その場合の選び方はkCa, kCa+1, ..., kC(min k b)通りある。

通常の場合は価値の高いものからa個だけを選べばよい。
ただし、a個めと価値の等しいものがn個あり、
そのうちk個を選べばよいのならば、選び方はnCk通りある。
-}
compute :: Integer -> Integer -> [Integer] -> (Double,Integer)
compute a b vs = (fromIntegral v/fromIntegral a, n)
  where
    (v,n) = compute1 a b vs

compute1 :: Integer -> Integer -> [Integer] -> (Integer,Integer)
compute1 a b vs
  | a < vmaxn = (vmax, sum $ map (comb vmaxn) [a..min vmaxn b])
  | otherwise = loop (0,a) vns
  where
    vns = map (\xs -> (head xs, fromIntegral $ length xs)) $ reverse $ group $ sort vs
    (vmax,vmaxn) = head vns
    loop (vsum,rest) ((v,n):vns)
      | rest > n = loop (vsum + v*n, rest - n) vns
      | otherwise = (vsum + v*rest, comb n rest)

comb n k = product [n-k+1..n] `div` product [1..k]
