def d_MaximumAverageSets(N, A, B, V):

    # パスカルの三角形でコンビネーション計算

    C = [[0] * (N + 1) for _ in range(N + 1)]

    for i in range(N + 1):

        for j in range(i + 1):

            if j == 0 or j == i:

                C[i][j] = 1

            else:

                C[i][j] = C[i - 1][j - 1] + C[i - 1][j]



    # 平均値の最大値を計算

    import decimal

    v = sorted(V, reverse=True)

    max_ave = decimal.Decimal(sum(v[:A]) / A)



    count = 0

    if v[0] != v[A - 1]:

        X = Y = 0

        for i in range(N):

            if v[A - 1] == v[i]:

                X += 1

                if i < A:

                    Y += 1

        count = C[X][Y]

    else:

        X = 0

        for i in range(N):

            if v[0] == v[i]:

                X += 1

        for i in range(A, B + 1):

            count += C[X][i]

    ans = '{}\n{}'.format(max_ave, count)

    return ans



N,A,B = [int(i) for i in input().split()]

V = [int(i) for i in input().split()]

print((d_MaximumAverageSets(N, A, B, V)))
from functools import reduce
def d_maximum_average_sets():

    from functools import reduce

    N, A, B = [int(i) for i in input().split()]

    V = sorted([int(i) for i in input().split()], reverse=True)



    def combination(n, r):

        numerator = reduce(lambda x, y: x * y, list(range(n, n - r, -1)))

        denominator = reduce(lambda x, y: x * y, list(range(1, r + 1)))

        return numerator // denominator



    if V[0] == V[A - 1]:  # V の上位 A 個がすべて同じ値 (v_max とおく)

        # V で値が v_max である x 個から A 個以上 B 個以下選ぶ

        x = V.count(V[0])

        count = sum([combination(x, i) for i in range(A, B + 1)])

    else:

        # 上位 A 個のうち最も値が小さな要素の値を v_min とおき、

        # v_min が上位 A 個のうち a 個あったとする。

        # V で値が v_min である x 個から a 個選ぶ。

        v_min = V[A-1]

        x, a = V.count(v_min), V[:A].count(v_min)

        count = combination(x, a)

    return '{}\n{}'.format(sum(V[:A]) / A, count)



print((d_maximum_average_sets()))
def d_MaximumAverageSets(N, A, B, V):
    # パスカルの三角形でコンビネーション計算
    C = [[0] * (N + 1) for _ in range(N + 1)]
    for i in range(N + 1):
        for j in range(i + 1):
            if j == 0 or j == i:
                C[i][j] = 1
            else:
                C[i][j] = C[i - 1][j - 1] + C[i - 1][j]
    # 平均値の最大値を計算
    import decimal

    v = sorted(V, reverse=True)
    max_ave = decimal.Decimal(sum(v[:A]) / A)
    count = 0
    if v[0] != v[A - 1]:
        X = Y = 0
        for i in range(N):
            if v[A - 1] == v[i]:
                X += 1
                if i < A:
                    Y += 1
        count = C[X][Y]
    else:
        X = 0
        for i in range(N):
            if v[0] == v[i]:
                X += 1
        for i in range(A, B + 1):
            count += C[X][i]
    ans = "{}\n{}".format(max_ave, count)
    return ans


N, A, B = [int(i) for i in input().split()]
V = [int(i) for i in input().split()]
print((d_MaximumAverageSets(N, A, B, V)))

from functools import reduce


def d_maximum_average_sets():
    from functools import reduce

    N, A, B = [int(i) for i in input().split()]
    V = sorted([int(i) for i in input().split()], reverse=True)

    def combination(n, r):
        numerator = reduce(lambda x, y: x * y, list(range(n, n - r, -1)))
        denominator = reduce(lambda x, y: x * y, list(range(1, r + 1)))
        return numerator // denominator

    if V[0] == V[A - 1]:  # V の上位 A 個がすべて同じ値 (v_max とおく)
        # V で値が v_max である x 個から A 個以上 B 個以下選ぶ
        x = V.count(V[0])
        count = sum([combination(x, i) for i in range(A, B + 1)])
    else:
        # 上位 A 個のうち最も値が小さな要素の値を v_min とおき、
        # v_min が上位 A 個のうち a 個あったとする。
        # V で値が v_min である x 個から a 個選ぶ。
        v_min = V[A - 1]
        x, a = V.count(v_min), V[:A].count(v_min)
        count = combination(x, a)
    return "{}\n{}".format(sum(V[:A]) / A, count)


print((d_maximum_average_sets()))

-def d_MaximumAverageSets(N, A, B, V): -    # パスカルの三角形でコンビネーション計算 -    C = [[0] * (N + 1) for _ in range(N + 1)] -    for i in range(N + 1): -        for j in range(i + 1): -            if j == 0 or j == i: -                C[i][j] = 1 -            else: -                C[i][j] = C[i - 1][j - 1] + C[i - 1][j] -    # 平均値の最大値を計算 -    import decimal - -    v = sorted(V, reverse=True) -    max_ave = decimal.Decimal(sum(v[:A]) / A) -    count = 0 -    if v[0] != v[A - 1]: -        X = Y = 0 -        for i in range(N): -            if v[A - 1] == v[i]: -                X += 1 -                if i < A: -                    Y += 1 -        count = C[X][Y] -    else: -        X = 0 -        for i in range(N): -            if v[0] == v[i]: -                X += 1 -        for i in range(A, B + 1): -            count += C[X][i] -    ans = "{}\n{}".format(max_ave, count) -    return ans +from functools import reduce -N, A, B = [int(i) for i in input().split()] -V = [int(i) for i in input().split()] -print((d_MaximumAverageSets(N, A, B, V))) +def d_maximum_average_sets(): +    from functools import reduce + +    N, A, B = [int(i) for i in input().split()] +    V = sorted([int(i) for i in input().split()], reverse=True) + +    def combination(n, r): +        numerator = reduce(lambda x, y: x * y, list(range(n, n - r, -1))) +        denominator = reduce(lambda x, y: x * y, list(range(1, r + 1))) +        return numerator // denominator + +    if V[0] == V[A - 1]:  # V の上位 A 個がすべて同じ値 (v_max とおく) +        # V で値が v_max である x 個から A 個以上 B 個以下選ぶ +        x = V.count(V[0]) +        count = sum([combination(x, i) for i in range(A, B + 1)]) +    else: +        # 上位 A 個のうち最も値が小さな要素の値を v_min とおき、 +        # v_min が上位 A 個のうち a 個あったとする。 +        # V で値が v_min である x 個から a 個選ぶ。 +        v_min = V[A - 1] +        x, a = V.count(v_min), V[:A].count(v_min) +        count = combination(x, a) +    return "{}\n{}".format(sum(V[:A]) / A, count) + + +print((d_maximum_average_sets()))