def solve() -> 'max(averages), count(max(averages))':

    from collections import Counter

    from functools import lru_cache

    n, a, b = map(int, input().split())

    v = tuple(sorted(map(int, input().split()), reverse=True))



    def max_ave_x() -> 'max(average),{counts_to_make_max_average}':

        ret = -1

        t = 0

        max_i = set()

        for i, e in enumerate(v, 1):

            t += e

            if a <= i:

                ave = t / i

                if ret < ave:

                    max_i = {i}

                    ret = ave

                elif ret == ave:

                    max_i.add(i)

            if i == b:

                break

        return ret, max_i



    @lru_cache(maxsize=None)

    def combination(n, r):

        if n < r or r < 0:

            return 0

        if r > n - r:

            return combination(n, n - r)

        if r == 0:

            return 1

        if r == 1:

            return n

        return combination(n - 1, r - 1) * n // r



    max_, indices = max_ave_x()



    ret = 0



    c1 = Counter(v)

    for i in indices:

        c2 = Counter(v[:i])

        t = 1

        for chr_ in c2:

            t *= combination(c1[chr_], c2[chr_])

        ret += t



    return max_, ret





print(*solve(), sep='\n')

def main():

    from decimal import Decimal



    N, A, B = list(map(int, input().split()))

    *v, = list(map(Decimal, input().split()))



    v.sort(reverse=True)



    max_average = sum(v[:A]) / A



    tail = v[A - 1]

    contained = [0] * (N + 1)

    s = 0

    for i, x in enumerate(v, start=1):

        if x == tail:

            s += 1

        contained[i] = s



    def choose(n, a):

        x, y = 1, 1

        for i in range(a):

            x = x * (n - i)

            y = y * (i + 1)

        return x // y



    count = 0

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

        if (k > A) and (v[k - 1] != max_average): break

        count += choose(contained[-1], contained[k])



    print(max_average)

    print(count)





if __name__ == '__main__':

    main()

def solve() -> "max(averages), count(max(averages))":
    from collections import Counter
    from functools import lru_cache

    n, a, b = map(int, input().split())
    v = tuple(sorted(map(int, input().split()), reverse=True))

    def max_ave_x() -> "max(average),{counts_to_make_max_average}":
        ret = -1
        t = 0
        max_i = set()
        for i, e in enumerate(v, 1):
            t += e
            if a <= i:
                ave = t / i
                if ret < ave:
                    max_i = {i}
                    ret = ave
                elif ret == ave:
                    max_i.add(i)
            if i == b:
                break
        return ret, max_i

    @lru_cache(maxsize=None)
    def combination(n, r):
        if n < r or r < 0:
            return 0
        if r > n - r:
            return combination(n, n - r)
        if r == 0:
            return 1
        if r == 1:
            return n
        return combination(n - 1, r - 1) * n // r

    max_, indices = max_ave_x()
    ret = 0
    c1 = Counter(v)
    for i in indices:
        c2 = Counter(v[:i])
        t = 1
        for chr_ in c2:
            t *= combination(c1[chr_], c2[chr_])
        ret += t
    return max_, ret


print(*solve(), sep="\n")

def main():
    from decimal import Decimal

    N, A, B = list(map(int, input().split()))
    (*v,) = list(map(Decimal, input().split()))
    v.sort(reverse=True)
    max_average = sum(v[:A]) / A
    tail = v[A - 1]
    contained = [0] * (N + 1)
    s = 0
    for i, x in enumerate(v, start=1):
        if x == tail:
            s += 1
        contained[i] = s

    def choose(n, a):
        x, y = 1, 1
        for i in range(a):
            x = x * (n - i)
            y = y * (i + 1)
        return x // y

    count = 0
    for k in range(A, B + 1):
        if (k > A) and (v[k - 1] != max_average):
            break
        count += choose(contained[-1], contained[k])
    print(max_average)
    print(count)


if __name__ == "__main__":
    main()

-def solve() -> "max(averages), count(max(averages))": -    from collections import Counter -    from functools import lru_cache +def main(): +    from decimal import Decimal -    n, a, b = map(int, input().split()) -    v = tuple(sorted(map(int, input().split()), reverse=True)) +    N, A, B = list(map(int, input().split())) +    (*v,) = list(map(Decimal, input().split())) +    v.sort(reverse=True) +    max_average = sum(v[:A]) / A +    tail = v[A - 1] +    contained = [0] * (N + 1) +    s = 0 +    for i, x in enumerate(v, start=1): +        if x == tail: +            s += 1 +        contained[i] = s -    def max_ave_x() -> "max(average),{counts_to_make_max_average}": -        ret = -1 -        t = 0 -        max_i = set() -        for i, e in enumerate(v, 1): -            t += e -            if a <= i: -                ave = t / i -                if ret < ave: -                    max_i = {i} -                    ret = ave -                elif ret == ave: -                    max_i.add(i) -            if i == b: -                break -        return ret, max_i +    def choose(n, a): +        x, y = 1, 1 +        for i in range(a): +            x = x * (n - i) +            y = y * (i + 1) +        return x // y -    @lru_cache(maxsize=None) -    def combination(n, r): -        if n < r or r < 0: -            return 0 -        if r > n - r: -            return combination(n, n - r) -        if r == 0: -            return 1 -        if r == 1: -            return n -        return combination(n - 1, r - 1) * n // r - -    max_, indices = max_ave_x() -    ret = 0 -    c1 = Counter(v) -    for i in indices: -        c2 = Counter(v[:i]) -        t = 1 -        for chr_ in c2: -            t *= combination(c1[chr_], c2[chr_]) -        ret += t -    return max_, ret +    count = 0 +    for k in range(A, B + 1): +        if (k > A) and (v[k - 1] != max_average): +            break +        count += choose(contained[-1], contained[k]) +    print(max_average) +    print(count) -print(*solve(), sep="\n") +if __name__ == "__main__": +    main()