// clang-format off
#include <bits/stdc++.h>
#define int long long
#define main signed main()
#define loop(i, a, n) for (int i = (a); i < (n); i++)
#define rep(i, n) loop(i, 0, n)
#define all(v) (v).begin(), (v).end()
#define rall(v) (v).rbegin(), (v).rend()
#define prec(n) fixed << setprecision(n)
#define pb push_back
#define mp make_pair
#define mt make_tuple
#define fi first
#define se second
using namespace std;
using pii = pair<int, int>;
using vi = vector<int>;
using vd = vector<double>;
using vc = vector<char>;
using vb = vector<bool>;
using vs = vector<string>;
using vpii = vector<pii>;
using vvi = vector<vi>;
using vvb = vector<vb>;
using vvpii = vector<vpii>;
template<typename A> using fn = function<A>;
constexpr int INF = sizeof(int) == sizeof(long long) ? 1000000000000000000LL : 1000000000;
constexpr int MOD = 1000000007;
constexpr double PI = acos(-1);
template<typename A, typename B> bool cmin(A &a, const B &b) { return a > b ? (a = b, true) : false; }
template<typename A, typename B> bool cmax(A &a, const B &b) { return a < b ? (a = b, true) : false; }
constexpr bool odd(const int &n) { return n & 1; }
constexpr bool even(const int &n) { return !odd(n); }
// clang-format on
main {
int n, a, b;
cin >> n >> a >> b;
vi v(n);
rep(i, n) cin >> v[i];
sort(rall(v));
cout << prec(32) << 1.0 * accumulate(v.begin(), v.begin() + a, 0LL) / a << endl;
int m = a - 1;
int t = v[m];
int c = count(all(v), t);
int l = m - distance(v.begin(), find(all(v), t)) + 1;
vvi dp(51, vi(51));
dp[0][0] = 1;
rep(i, 51) rep(j, 51) {
if (i > 0) dp[i][j] += dp[i - 1][j];
if (j > 0) dp[i][j] += dp[i][j - 1];
}
auto nCr = [&](int n, int r) { return dp[n - r][r]; };
if (v.front() == t) {
int s = 0;
loop(i, a, min(c, b) + 1) s += nCr(c, i);
cout << s << endl;
} else {
cout << nCr(c, l) << endl;
}
}