#include <bits/stdc++.h>

using namespace std;

//typedef long long          	ll;
typedef long long unsigned 	ll;
typedef double             	dl;
typedef pair<int,int>      	pii;
typedef pair<ll,ll>     	pll;
typedef vector<int>        	vi;
typedef vector<ll>        	vl;
typedef map<int,int> 		mii;
typedef map<ll,ll>         	mll;
typedef map<string,int>    	msi;
typedef map<char,int>      	mci;
typedef pair<int ,pii>      piii;
typedef vector<pii>         vpii;
typedef vector<piii>        vpiii;

#define pi                  acos(-1.0)
#define S                   second
#define F                   first
#define pb                  push_back
#define MP                  make_pair
#define mem(a,b)            memset(a,b,sizeof a)
#define all(v)              v.begin(),v.end()
#define vsort(v)            sort(v.begin(),v.end())
#define IO                  ios_base::sync_with_stdio(false);cin.tie(NULL)
#define gcd(a,b)            __gcd(a,b)

#define I(a)                scanf("%d",&a)
#define I2(a,b)             scanf("%d%d",&a,&b)
#define L(a)                scanf("%lld",&a)
#define L2(a,b)             scanf("%lld%lld",&a,&b)
#define D(a)                scanf("%lf",&a)

#define SP                  cout<<" ";
#define PI(a)               printf("%d",a)
#define PL(a)               printf("%lld",a)
#define PD(a)               printf("%lf",a)
#define CHK                 cout<<"MK"<<endl

template <class T> inline T BMOD(T p,T e,T m){T ret=1;while(e){if(e&1) ret=(ret*p)%m;p=(p*p)%m;e>>=1;}return (T)ret;}
template <class T> inline T MODINV(T a,T m){return BMOD(a,m-2,m);}
template <class T> inline T isPrime(T a){for(T i=2;i<=sqrt(double(a));i++){if(a%i==0){return 0;}}return 1;}
template <class T> inline T lcm(T a, T b){return (a/gcd(a,b))*b;}
template <class T> inline T power(T a, T b){return (b==0)?1:a*power(a,b-1);}
template <class T> inline string to_str(T t) { stringstream ss; ss<<t; return ss.str();}
template <class T> inline long long toLong(T t) {stringstream ss;ss<<t;long long ret;ss>>ret;return ret;}
template <class T> inline int toInt(T t) {stringstream ss;ss<<t;int ret;ss>>ret;return ret;}

//~ cout << fixed << setprecision(20) << Ans << endl;
//~ priority_queue<piii,vpiii, greater<piii> >pq; //for dijkstra
/*                 _                      */
/*____________|\/||_||\||_________________*/



string buffer;
int INT(){
	getline(cin,buffer);
	return toInt(buffer);
}
int LONG(){
	getline(cin,buffer);
	return toLong(buffer);
}

#define MX 150010
const ll MD = 1e9+7;

ll nCr(ll n ,ll r)
{
    if(n<=r) return 1;
    ll nr = n-r,ret=1;
    for(ll i=max(nr,r)+1,j=1;i<=n;j++,i++)
    {
        ret*=i;
        ret/=j;
    }
    return ret;
}

int main()
{
    IO;
    ll n, a, b, v[55];
    cin >> n >> a >> b;
    map<ll,ll>mm,mp;
    for(int i = 0; i < n; i++) {
        cin >> v[i];
        mm[v[i]]++;
    }
    sort(v, v + n, [](ll x, ll y) {
        return x > y;
    });
    ll  sm=0;
    for(int i = 0; i < a; i++) {
        sm += v[i];
        mp[v[i]]++;
    }
    cout<<fixed<<setprecision(10)<<(dl)(sm*1.0)/a*1.0<<endl;
    ll t = mp[v[a-1]];
    ll tt = mm[v[a - 1]], Ans=0;
    if(t == a) {
        for(ll i = a;i<=b && i<=tt;i++)
        {
            Ans+= nCr(tt,i);
        }
    } else{
        Ans = nCr(tt, t);
    }
    cout<<Ans<<endl;
    return 0;
}


Measured memory_bytes: 256