/*******************
AUTHOR: HUMBLE_LOSER
*******************/

#include <iostream>
#include <cstdio>
#include <cassert>
#include <math.h>
#include <ctime>
#include <bitset>
#include <iomanip>
#include <cstring>
#include <sstream>
#include <algorithm>
#include <stack>
#include <queue>
#include <list>
#include <map>
#include <set>
#include <functional>
#include <vector>

using namespace std;

#define PI acos(-1)
#define EXP 2.7182818284590452353602874713527
#define endl '\n'
#define ll long long
#define llu long long unsigned
#define ii pair<int,int>
#define vi vector<int>
#define vii vector<ii>
#define vvi vector<vi>
#define vvii vector<vii>
#define mp make_pair
#define pb push_back
#define eb emplace_back
#define xx first
#define yy second
#define sz(v) int(v.size())
#define eps 1e-5
#define forr(i,a,b) for(int i = int(a) ; i<= int(b) ; i++ )
#define rof(i,a,b)  for(int i = int(a) ; i>= int(b) ; i-- )
#define rep(i,n) for(int i=0 ; i<int(n) ; i++ )
#define all(v) (v).begin(),(v).end()
#define inf 0x3f3f3f3f
#define mod 1000000007
#define zero(x) memset(&x,0,sizeof(x))
#define minus(x) memset(&x,0xff,sizeof(x))
#define infinity(x) memset(&x,0x3f,sizeof(x))
#define boost cin.tie(0); ios_base::sync_with_stdio(0); 
#define trace1(x) cerr << #x <<" = "<< x <<endl;
#define trace2(x,y) cerr << #x <<" = "<< x <<" , "<< #y <<" = "<< y <<endl;
#define trace3(x,y,z) cerr << #x <<" = "<< x <<" , "<< #y <<" = "<< y <<" , "<< #z <<" = "<< z <<endl;
#define trace_arr(a,i,n) cerr << #a <<" : " ; forr(_i,i,n) cerr << a[_i] << " "; cerr << endl;
#define trace_mat(a,i,n,j,m) cerr << #a <<" :\n" ; forr(_i,i,n){forr(_j,j,m) cerr << setw(6) << a[_i][_j] << " "; cerr << endl;}cerr<<endl;
#define test_case int __T;cin >> __T; forr(tc, 1 , __T)     
#define code_jam_output cout << "Case #" << tc << ": " 

template<class T, class U>
ostream& operator<<(ostream& out, const pair<T, U>& a) {out << "[" << a.first << " " << a.second << "]"; return out;}
template<class T>
ostream& operator<<(ostream& out, const vector<T>& a) {out << "[ "; for (auto &it : a)out << it << " "; out << "]"; return out;}
template<class T>
ostream& operator<<(ostream& out, const set<T>& a) {out << "[ "; for (auto &it : a)out << it << " "; out << "]"; return out;}
template<class T>
ostream& operator<<(ostream& out, const multiset<T>& a) {out << "[ "; for (auto &it : a)out << it << " "; out << "]"; return out;}
template<class T, class U>
ostream& operator<<(ostream& out, const map<T, U>& a) {for (auto &it : a)out << it.first << " -> " << it.second << " | "; return out;}
template<class T, class U>
ostream& operator<<(ostream& out, const multimap<T, U>& a) {for (auto &it : a)out << it.first << " -> " << it.second << " | "; return out;}

int x_dir[4] = { -1,0,1,0}; // standard x-y axis NORTH - EAST - SOUTH - WEST
int y_dir[4] = { 0,1,0,-1};

long double absl( long double a , long double b )   {
    a = a-b;
    if( a<0 )   a*=-1;
    return a;
}

ll ncr[55][55];

void calulate_ncr()
{
    zero(ncr);
    forr(i,0,50)
        ncr[i][0] = 1;
    ncr[0][0] = 1;
    forr(i,1,50)    forr(j,1,50)
        ncr[i][j] = ncr[i-1][j-1] + ncr[i-1][j];
}

vector<long double> arr;

int main() 
{
    int n,a,b;
    cin >> n >> a >> b;
    
    arr.assign(n,0);
    
    map<long double, int> ans,mapping;
    forr(i,0,n-1)   
    {
        cin >> arr[i];
        mapping[arr[i]]++;
    }
    sort(all(arr));

    long double sum = 0;
    long double max_sum = 0;
    map<long double, vector<long double> > mpa;
    
    vi index;

    forr(i,n-b,n-1)
        sum += arr[i];

    max_sum = sum/b;
    index.pb(n-b);

    forr(i,n-b,n-a)
    {
        if( max_sum < sum/(n-i) )
        {
            max_sum = sum/(n-i);
            index = vi();
            index.pb(i);
        }
        else if( absl(max_sum,sum/(n-i)) < 1e-6 and i!=n-b )
            index.pb(i);

        sum -= arr[i];
    }

    cout << fixed << setprecision(6) << setfill('0') << max_sum; 

    calulate_ncr();

    ll final_ans = 0;
    for( auto in: index )
    {
        ans.clear();
        forr(k,in,n-1)
            ans[arr[k]]++;

        ll temp_ans = 1;
        for( auto x: ans )
        {
            int from = mapping[x.xx];
            temp_ans *= ncr[from][x.yy];
        }
        // trace2(index,temp_ans);
        final_ans += temp_ans;
    }
    cout << endl <<  final_ans;
}

Measured memory_bytes: 256