fun main(arg: Array<String>) {
    val (N, A, B) = listOfInt()
    val V = listOfDouble().sortedDescending()
    val avr = V.subList(0, A).sum() / A
    println(avr)
    var num = 0
    var pos = 0
    repeat(N) { n ->
        if (V[n] == V[A - 1]) {
            num += 1
            if (n < A) pos += 1
        }
    }
    var cnt = 0L
    val pas = PascalTriangle(N)
    if (pos != A) cnt += pas.combi(num, pos)
    else for (n in A .. B) cnt += pas.combi(num, n)
    println(cnt)
}

data class PascalTriangle(private val N: Int) {
    private val table = Array(N + 1) { LongArray(N + 1) }
    init {
        for (n in 0 .. N)
        for (m in 0 .. n) {
            if (m == 0 || m == n) table[n][m] = 1L
            else table[n][m] = table[n - 1][m - 1] + table[n - 1][m]
        }
    }
    constructor(n: Long): this(n.toInt())
    fun combi(n: Int, m: Int) = table[n][m]
}

fun next() = readLine()!!
fun nextInt(delta: Int = 0) = Integer.parseInt(next()) + delta
fun nextLong() = next().toLong()
fun listOfString() = next().split(" ")
fun listOfInt() = listOfString().map(String::toInt)
fun listOfLong() = listOfString().map(String::toLong)
fun listOfDouble() = listOfString().map(String::toDouble)
