object Main {

  def main(args: Array[String]): Unit = {
    val sc = new java.util.Scanner(System.in)

    def combinationTable(n: Int): Array[Array[Long]] = {
      val C = Array.fill(n+1, n+1)(1L)
      (2 to n) foreach { i =>
        (1 until i) foreach { j =>
          C(i)(j) = C(i-1)(j-1) + C(i-1)(j)
        }
      }
      C
    }


    // 品物の中で, 大きい順にA個選べば良い？
    // 同じ平均になる選び方が何通りあるか?
    // 最後に取った数と同じものが何個あるか？で決まる？

    val N, A, B = sc.nextInt()

    val C = combinationTable(N)
    val V = Array.fill(N)(sc.nextLong()).sorted(Ordering.Long.reverse)
    val ave = V.take(A).sum / A.toDouble

    println(ave)
    if (V.takeWhile(_ == V(0)).length >= A) {
      val length = V.takeWhile(_ == V(0)).length
      println((A to length).foldLeft(0L)((b, n) =>
        b + C(length)(n)
      ))
    } else {
      val b = V.take(A)
      val r = b.count(_ == V(A-1))
      val n = V.count(_ == V(A-1))
      println(C(n)(r))
    }
  }

}