import sys

stdin = sys.stdin



def li(): return [int(x) for x in stdin.readline().split()]

def li_(): return [int(x)-1 for x in stdin.readline().split()]

def lf(): return [float(x) for x in stdin.readline().split()]

def ls(): return stdin.readline().split()

def ns(): return stdin.readline().rstrip()

def lc(): return list(ns())

def ni(): return int(ns())

def nf(): return float(ns())



# nの逆元のリスト

def inv_mod(n:int, mod:int) -> list:

    inv = [0,1]

    for i in range(2,n+1):

        inv.append(mod - ((mod//i)*inv[mod%i]) % mod)

    return inv

       

# nの階乗のリスト

def fact(n:int, mod:int) -> list:

    fac = [1,1]

    res = 1

    for i in range(2,n+1):

        res = res*i%mod

        fac.append(res)

    return fac



# nの階乗の逆元のリスト

def fact_inv(n:int, inv:list, mod:int) -> list:

    facInv = [1,1]

    for i in range(2,n+1):

        facInv.append(facInv[i-1]*inv[i] % mod)

    return facInv

        

# 二項係数

def nCr(n:int, r:int, mod:int, fac:list, facInv:list) -> int:

    if not (0<=r and r<=n):

        return 0

    

    return ((fac[n]*facInv[r]) % mod) * facInv[n-r] % mod



from itertools import accumulate

from collections import Counter



n,a,b = li()

v = li()



v.sort(reverse=True)

v_cum = list(accumulate(v))



ans_cand = []



# 貪欲に最大値を選ぶ

for i in range(a,b+1):

    ans_cand.append(v_cum[i-1] / i)

    

ans = max(ans_cand)

opt_i = a + ans_cand.index(ans) - 1



cnt_v = Counter(v)

opt_set = v[:opt_i+1]



# 貪欲最大が何通りできるか考える

MOD = 46116646144580591

inv = inv_mod(n, MOD)

fac = fact(n, MOD)

facInv = fact_inv(n,inv, MOD)



pat = 0



if v[0] == v[opt_i]:

    for i in range(a, min(b, cnt_v[v[0]]) + 1):

        pat += nCr(cnt_v[v[0]], i, MOD, fac, facInv)



else:

    cnt_opt = Counter(opt_set)

    pat = nCr(cnt_v[v[opt_i]], cnt_opt[v[opt_i]], MOD, fac, facInv)





        

print(ans)

print(pat)
import sys

stdin = sys.stdin

 

sys.setrecursionlimit(10**5) 

 

def li(): return list(map(int, stdin.readline().split()))

def li_(): return [int(x)-1 for x in stdin.readline().split()]

def lf(): return list(map(float, stdin.readline().split()))

def ls(): return stdin.readline().split()

def ns(): return stdin.readline().rstrip()

def lc(): return list(ns())

def ni(): return int(stdin.readline())

def nf(): return float(stdin.readline())



# nの逆元のリスト

def inv_mod(n:int, mod:int) -> list:

    inv = [0,1]

    for i in range(2,n+1):

        inv.append(mod - ((mod//i)*inv[mod%i]) % mod)

    return inv

       

# nの階乗のリスト

def fact(n:int, mod:int) -> list:

    fac = [1,1]

    res = 1

    for i in range(2,n+1):

        res = res*i%mod

        fac.append(res)

    return fac



# nの階乗の逆元のリスト

def fact_inv(n:int, inv:list, mod:int) -> list:

    facInv = [1,1]

    for i in range(2,n+1):

        facInv.append(facInv[i-1]*inv[i] % mod)

    return facInv

        

# 二項係数

def nCr(n:int, r:int, mod:int, fac:list, facInv:list) -> int:

    if not (0<=r and r<=n):

        return 0

    

    return ((fac[n]*facInv[r]) % mod) * facInv[n-r] % mod



# nCrの和をとる関数

def comb_sum(base: int, start: int, last: int, mod: int, fac: list, facInv:list):

    ret = 0

    for i in range(start, last+1):

        ret += nCr(base, i, mod, fac, facInv)

        

    return ret



n,a,b = li()

v = list(li())



v.sort(reverse=True)

maxv = max(v)

maxs = v.count(maxv)



MOD = 2**61-1

MAXN = 100

inv = inv_mod(MAXN, MOD)

fac = fact(MAXN, MOD)

fac_inv = fact_inv(MAXN, inv, MOD)





if maxs <= a:

    ans = sum(v[:a]) / a

    lastcnt = v.count(v[a-1])

    pat = nCr(lastcnt, a-v.index(v[a-1]), MOD, fac, fac_inv)

    

elif a < maxs < b:

    ans = maxv

    pat = comb_sum(maxs, a, maxs, MOD, fac, fac_inv)

    

else:

    ans = maxv

    pat = comb_sum(maxs, a, b, MOD, fac, fac_inv)

    

print(ans)

print(pat)

    
import sys

stdin = sys.stdin


def li():
    return [int(x) for x in stdin.readline().split()]


def li_():
    return [int(x) - 1 for x in stdin.readline().split()]


def lf():
    return [float(x) for x in stdin.readline().split()]


def ls():
    return stdin.readline().split()


def ns():
    return stdin.readline().rstrip()


def lc():
    return list(ns())


def ni():
    return int(ns())


def nf():
    return float(ns())


# nの逆元のリスト
def inv_mod(n: int, mod: int) -> list:
    inv = [0, 1]
    for i in range(2, n + 1):
        inv.append(mod - ((mod // i) * inv[mod % i]) % mod)
    return inv


# nの階乗のリスト
def fact(n: int, mod: int) -> list:
    fac = [1, 1]
    res = 1
    for i in range(2, n + 1):
        res = res * i % mod
        fac.append(res)
    return fac


# nの階乗の逆元のリスト
def fact_inv(n: int, inv: list, mod: int) -> list:
    facInv = [1, 1]
    for i in range(2, n + 1):
        facInv.append(facInv[i - 1] * inv[i] % mod)
    return facInv


# 二項係数
def nCr(n: int, r: int, mod: int, fac: list, facInv: list) -> int:
    if not (0 <= r and r <= n):
        return 0
    return ((fac[n] * facInv[r]) % mod) * facInv[n - r] % mod


from itertools import accumulate
from collections import Counter

n, a, b = li()
v = li()
v.sort(reverse=True)
v_cum = list(accumulate(v))
ans_cand = []
# 貪欲に最大値を選ぶ
for i in range(a, b + 1):
    ans_cand.append(v_cum[i - 1] / i)
ans = max(ans_cand)
opt_i = a + ans_cand.index(ans) - 1
cnt_v = Counter(v)
opt_set = v[: opt_i + 1]
# 貪欲最大が何通りできるか考える
MOD = 46116646144580591
inv = inv_mod(n, MOD)
fac = fact(n, MOD)
facInv = fact_inv(n, inv, MOD)
pat = 0
if v[0] == v[opt_i]:
    for i in range(a, min(b, cnt_v[v[0]]) + 1):
        pat += nCr(cnt_v[v[0]], i, MOD, fac, facInv)
else:
    cnt_opt = Counter(opt_set)
    pat = nCr(cnt_v[v[opt_i]], cnt_opt[v[opt_i]], MOD, fac, facInv)
print(ans)
print(pat)

import sys

stdin = sys.stdin
sys.setrecursionlimit(10**5)


def li():
    return list(map(int, stdin.readline().split()))


def li_():
    return [int(x) - 1 for x in stdin.readline().split()]


def lf():
    return list(map(float, stdin.readline().split()))


def ls():
    return stdin.readline().split()


def ns():
    return stdin.readline().rstrip()


def lc():
    return list(ns())


def ni():
    return int(stdin.readline())


def nf():
    return float(stdin.readline())


# nの逆元のリスト
def inv_mod(n: int, mod: int) -> list:
    inv = [0, 1]
    for i in range(2, n + 1):
        inv.append(mod - ((mod // i) * inv[mod % i]) % mod)
    return inv


# nの階乗のリスト
def fact(n: int, mod: int) -> list:
    fac = [1, 1]
    res = 1
    for i in range(2, n + 1):
        res = res * i % mod
        fac.append(res)
    return fac


# nの階乗の逆元のリスト
def fact_inv(n: int, inv: list, mod: int) -> list:
    facInv = [1, 1]
    for i in range(2, n + 1):
        facInv.append(facInv[i - 1] * inv[i] % mod)
    return facInv


# 二項係数
def nCr(n: int, r: int, mod: int, fac: list, facInv: list) -> int:
    if not (0 <= r and r <= n):
        return 0
    return ((fac[n] * facInv[r]) % mod) * facInv[n - r] % mod


# nCrの和をとる関数
def comb_sum(base: int, start: int, last: int, mod: int, fac: list, facInv: list):
    ret = 0
    for i in range(start, last + 1):
        ret += nCr(base, i, mod, fac, facInv)
    return ret


n, a, b = li()
v = list(li())
v.sort(reverse=True)
maxv = max(v)
maxs = v.count(maxv)
MOD = 2**61 - 1
MAXN = 100
inv = inv_mod(MAXN, MOD)
fac = fact(MAXN, MOD)
fac_inv = fact_inv(MAXN, inv, MOD)
if maxs <= a:
    ans = sum(v[:a]) / a
    lastcnt = v.count(v[a - 1])
    pat = nCr(lastcnt, a - v.index(v[a - 1]), MOD, fac, fac_inv)
elif a < maxs < b:
    ans = maxv
    pat = comb_sum(maxs, a, maxs, MOD, fac, fac_inv)
else:
    ans = maxv
    pat = comb_sum(maxs, a, b, MOD, fac, fac_inv)
print(ans)
print(pat)

+sys.setrecursionlimit(10**5) -    return [int(x) for x in stdin.readline().split()] +    return list(map(int, stdin.readline().split())) -    return [float(x) for x in stdin.readline().split()] +    return list(map(float, stdin.readline().split())) -    return int(ns()) +    return int(stdin.readline()) -    return float(ns()) +    return float(stdin.readline()) -from itertools import accumulate -from collections import Counter +# nCrの和をとる関数 +def comb_sum(base: int, start: int, last: int, mod: int, fac: list, facInv: list): +    ret = 0 +    for i in range(start, last + 1): +        ret += nCr(base, i, mod, fac, facInv) +    return ret + -v = li() +v = list(li()) -v_cum = list(accumulate(v)) -ans_cand = [] -# 貪欲に最大値を選ぶ -for i in range(a, b + 1): -    ans_cand.append(v_cum[i - 1] / i) -ans = max(ans_cand) -opt_i = a + ans_cand.index(ans) - 1 -cnt_v = Counter(v) -opt_set = v[: opt_i + 1] -# 貪欲最大が何通りできるか考える -MOD = 46116646144580591 -inv = inv_mod(n, MOD) -fac = fact(n, MOD) -facInv = fact_inv(n, inv, MOD) -pat = 0 -if v[0] == v[opt_i]: -    for i in range(a, min(b, cnt_v[v[0]]) + 1): -        pat += nCr(cnt_v[v[0]], i, MOD, fac, facInv) +maxv = max(v) +maxs = v.count(maxv) +MOD = 2**61 - 1 +MAXN = 100 +inv = inv_mod(MAXN, MOD) +fac = fact(MAXN, MOD) +fac_inv = fact_inv(MAXN, inv, MOD) +if maxs <= a: +    ans = sum(v[:a]) / a +    lastcnt = v.count(v[a - 1]) +    pat = nCr(lastcnt, a - v.index(v[a - 1]), MOD, fac, fac_inv) +elif a < maxs < b: +    ans = maxv +    pat = comb_sum(maxs, a, maxs, MOD, fac, fac_inv) -    cnt_opt = Counter(opt_set) -    pat = nCr(cnt_v[v[opt_i]], cnt_opt[v[opt_i]], MOD, fac, facInv) +    ans = maxv +    pat = comb_sum(maxs, a, b, MOD, fac, fac_inv)