#include<bits/stdc++.h>
using namespace std;

#define rep(i,n) for(int i=0;i<(n);++i)
#define reps(i,n) for(int i=1;i<=(n);++i)
#define repr(i,n) for(int i=(n);i>=0;--i)
#define cinv(n,vec) VL vec(n);rep(i,n)cin>>vec[i]
#define int long long
#define itn int
#define pb push_back
#define eb emplace_back
#define m_p make_pair
#define m_t make_tuple
#define p_p(a,b) pb(m_p(a,b))
#define all(a) a.begin(),a.end()
#define SORT(a) sort(all(a))
#define RSORT(a) sort(all(a),greater<>())
#define UNIQUE(a) a.erase(unique(all(a)),a.end())
#define SZ(a) (signed)(a.size())
#define debg(a) cout<<#a<<" "<<a<<endl;
#define debgp(a) cout<<#a<<" "<<a.fi<<" : "<<a.se<<endl
#define call(a) for(auto i:a)cout<<i<<" ";cout<<endl
#define callp(a) for(auto [k,v]:a)cout<<k<<":"<<v<<endl
#define show(a) for(cont &y:a){for(cont &x:y){cout<<x<<" ";}cout<<endl;}
#define out(a) cout<<(a)<<endl
#define ENDL cout<<endl
#define YES cout<<"YES"<<endl
#define NO cout<<"NO"<<endl
#define Yes cout<<"Yes"<<endl
#define No cout<<"No"<<endl
#define fi first
#define se second
#define V vector
#define P pair
#define T tuple
#define PQ priority_queue
#define cont const auto
#define VV(type,name,y,x,a) vector<vector<type>> name = vector<vector<type>>(y,vector<type>(x,a))
typedef long long ll;
typedef double D;
typedef long double LD;
typedef string str;
typedef vector<ll> VL;
typedef pair<ll,ll> PL;
typedef vector<pair<ll,ll>> VP;
typedef tuple<ll,ll,ll> T3;
typedef tuple<ll,ll,ll,ll> T4;
typedef struct{ll to;ll cost;} Graphs;
typedef V<V<Graphs>> AdjList;
const signed INF = (1LL<<30);
const long long MOD = (1e9+7);
const long long LINF = (1LL<<60);
const long long LMAX = LLONG_MAX;
void YN(bool b){cout<<(b?"Yes":"No")<<endl;}
template<class T>inline T gcd(T a,T b){if(b==0)return a; return(gcd(b,a%b));}
template<class T>inline T lcm(T a,T b){return a/gcd(a,b)*b;}
template<class T>inline bool chmax(T &a,const T &b){if(a<b){a=b;return true;}return false;}
template<class T>inline bool chmin(T &a,const T &b){if(a>b){a=b;return true;}return false;}


V<VL> C(55,VL(55,0LL));
void comb(){
  rep(i,53){
    rep(j,i+1){
      if(j==0||j==i)C[i][j]=1LL;
      else C[i][j]=C[i-1][j-1]+C[i-1][j];
    }
  }
}
/*
//ll C[55][55];
vector<vector<ll>> C(60,vector<ll>(60,0LL));
void comb(){
  for(int i=0;i<=51;++i){
    for(int j=0;j<=i;++j){
      if(j==0 or j==i)C[i][j]=1LL;
      else C[i][j]=C[i-1][j-1]+C[i-1][j];
    }
  }
}
*/

signed main(){
  cin.tie(0);
  ios::sync_with_stdio(false);
  cout<<fixed<<setprecision(10);
  
  ll n,a,b;
  cin>>n>>a>>b;
  cinv(n,v);

  comb();
  RSORT(v);
  
  D maxAve=0.0;
  rep(i,a)maxAve+=(D)v[i];
  maxAve/=(D)a;
  
  map<ll,ll> cnt;
  for(auto e:v)cnt[e]++;
  ll ans=0LL;
  if(cnt[v[0]]>a){
    for(ll i=a;i<=min(b,cnt[v[0]]);++i){
      ans+=C[cnt[v[0]]][i];
    }
  }
  else {
    ll canOcupy=0;
    rep(i,a)if(v[i]==v[a-1])canOcupy++;
    ans=C[cnt[v[a-1]]][canOcupy];
  }

  /*
  ll Acnt=0,Apos=0;
  rep(i,n){
    if(v[i]==v[a-1]){
      Acnt++;
      Apos+=(i<a);
    }
  }
  ll ans=0;
  if(Apos==a){
    for(ll i=a;i<=b;++i){
      ans+=C[Acnt][i];
    }
  }
  else{
    ans+=C[Acnt][Apos];
    debg(Apos);
  }
  */
  

  out(maxAve);
  out(ans);
  


  return 0;
}

Measured memory_bytes: 256