#include <bits/stdc++.h>
using namespace std;
 
#define REP(i, s) for (int i = 0; i < s; ++i)
#define ALL(v) (v).begin(), (v).end()
#define COUT(x) cout << #x << " = " << (x) << " (L" << __LINE__ << ")" << endl
#define EACH(i, s) for (__typeof__((s).begin()) i = (s).begin(); i != (s).end(); ++i)
#define DEBUG
#define int long long
#define INF 1e18
template<class T> inline bool chmax(T& a, T b) { if (a < b) { a = b; return 1; } return 0; }
template<class T> inline bool chmin(T& a, T b) { if (a > b) { a = b; return 1; } return 0; }
template<class T1, class T2> ostream& operator << (ostream &s, pair<T1,T2> P)
{ return s << '<' << P.first << ", " << P.second << '>'; }
template<class T> ostream& operator << (ostream &s, vector<T> P)
{ for (int i = 0; i < P.size(); ++i) { if (i > 0) { s << " "; } s << P[i]; } return s; }
template<class T> ostream& operator << (ostream &s, vector<vector<T> > P)
{ for (int i = 0; i < P.size(); ++i) { s << endl << P[i]; } return s << endl; }
template<class T> ostream& operator << (ostream &s, set<T> P)
{ EACH(it, P) { s << "<" << *it << "> "; } return s << endl; }
template<class T1, class T2> ostream& operator << (ostream &s, map<T1,T2> P)
{ EACH(it, P) { s << "<" << it->first << "->" << it->second << "> "; } return s << endl; }
template<class T>void show(vector<T>v){for (int i = 0; i < v.size(); i++){cerr<<v[i]<<" ";}cerr<<"\n";}
typedef long long ll;

const int MAX = 510000;
const int MOD = 1000000007;

long long fac[MAX], finv[MAX], inv[MAX];

// テーブルを作る前処理
void COMinit()
{
    fac[0] = fac[1] = 1;
    finv[0] = finv[1] = 1;
    inv[1] = 1;
    for (int i = 2; i < MAX; i++)
    {
        fac[i] = fac[i - 1] * i % MOD;
        inv[i] = MOD - inv[MOD % i] * (MOD / i) % MOD;
        finv[i] = finv[i - 1] * inv[i] % MOD;
    }
}

// 二項係数計算
long long COM(int n, int k)
{
    if (n < k)
        return 0;
    if (n < 0 || k < 0)
        return 0;
    return fac[n] * (finv[k] * finv[n - k] % MOD) % MOD;
}

ll add(ll x, ll y)
{
    x += y;
    if (x >= MOD)
        return x - MOD;
    return x;
}
ll sub(ll x, ll y)
{
    x -= y;
    if (x < 0)
        return x + MOD;
    return x;
}
ll mult(ll x, ll y)
{
    return (x * y) % MOD;
}
ll bin_pow(ll x, ll p)
{
    if (p == 0)
        return 1;
    if (p & 1)
        return mult(x, bin_pow(x, p - 1));
    return bin_pow(mult(x, x), p / 2);
}

int com[51][51];
signed main()
{
    int n,a,b;
    cin>>n>>a>>b;
    vector<double>v(n);
    REP(i,n) cin>>v[i];
    map<int,int>mp;
    REP(i,n) mp[v[i]]++;
    sort(ALL(v));
    reverse(ALL(v));
    com[0][0] = 1;
    for (int i = 1; i < 51; i++)
    {
        for (int j = 0; j <= i; j++)
        {
            com[i][j] += com[i - 1][j];
            if (j > 0)
                com[i][j] += com[i - 1][j - 1];
        }
    }
    double ans=0;
    for (int i = a; i <= b; i++)
    {
        double cnt=0;
        for (int j = 0; j <i; j++)
        {
            cnt+=v[j];
        }
        
        //chmax(ans,cnt/(double)i);
        if (ans < cnt / (double)i){
            ans = cnt / (double)i;
        }
    }
    printf("%.10f\n",ans);
    if(v[a-1]!=v[0]){
        int x=mp[v[a-1]];
        int s=0;
        REP(i,a) if(v[a-1]==v[i]) s++;
        cout<<com[x][s]<<endl;
    }
    else{

        int index=a-1;
        for (int i = a; i <= b; i++)
        {
            if(v[a-1]==v[i]) {
                index=i;
            }
            else break;
        }
        //COMinit();
        int ans=0;
        
        for (int i = a; i <= min(b,index+1); i++)
        {
            int x=mp[v[0]];

          ans+=com[x][i];
        }
       
        cout<<ans<<endl;
        //cerr<<COM(20,4)<<endl;
    }

    return 0;
}

Measured memory_bytes: 256