#define __MAI
#include"bits/stdc++.h"

using namespace std;
typedef unsigned int uint;
typedef long long int ll;
typedef unsigned long long int ull;

#define debugv(v) printf("L%d %s => ",__LINE__,#v);for(auto e:v){cout<<e<<" ";}cout<<endl;
#define debugm(m) printf("L%d %s is..\n",__LINE__,#m);for(auto v:m){for(auto e:v){cout<<e<<" ";}cout<<endl;}
#define debuga(m,w) printf("L%d %s is => ",__LINE__,#m);for(int x=0;x<(w);x++){cout<<(m)[x]<<" ";}cout<<endl;
#define debugaa(m,w,h) printf("L%d %s is..\n",__LINE__,#m);for(int y=0;y<(h);y++){for(int x=0;x<(w);x++){cout<<(m)[x][y]<<" ";}cout<<endl;}
#define debugaar(m,w,h) printf("L%d %s is..\n",__LINE__,#m);for(int y=0;y<(h);y++){for(int x=0;x<(w);x++){cout<<(m)[y][x]<<" ";}cout<<endl;}
#define ALL(v) (v).begin(),(v).end()
#define BIGINT 0x7FFFFFFF
#define E107 1000000007ll
void printbit(int u) { if (u == 0)cout << 0; else { int s = 0, k = 0; for (; 0<u; u >>= 1, k++)s = (s << 1) | (u & 1); for (; 0<k--; s >>= 1)cout << (s & 1); } }

#define TIME chrono::system_clock::now()
#define MILLISEC(t) (chrono::duration_cast<chrono::milliseconds>(t).count())
namespace {
	std::chrono::system_clock::time_point t;
	void tic() { t = TIME; }
	void toc() { fprintf(stderr, "TIME : %lldms\n", MILLISEC(TIME - t)); }
	std::chrono::system_clock::time_point tle = TIME;
	void safe_tle(int msec) { assert(MILLISEC(TIME - tle) < msec); }
}

template<typename T1, typename T2>
ostream& operator <<(ostream &o, const pair<T1, T2> p) { o << "(" << p.first << ":" << p.second << ")"; return o; }

#ifndef __MAI

namespace {
	class MaiScanner {
	public:
		template<typename T>
		void input_integer(T& var) {
			var = 0;
			T sign = 1;
			int cc = getchar_unlocked();
			for (; cc<'0' || '9'<cc; cc = getchar_unlocked())
				if (cc == '-') sign = -1;
			for (; '0' <= cc&&cc <= '9'; cc = getchar_unlocked())
				var = (var << 3) + (var << 1) + cc - '0';
			var = var*sign;
		}
		void ign() { getchar_unlocked(); }
		MaiScanner& operator>>(int& var) {
			input_integer<int>(var);
			return *this;
		}
		MaiScanner& operator>>(long long& var) {
			input_integer<long long>(var);
			return *this;
		}
	};
	class MaiPrinter {
		int stack_p;
		char stack[32];
	public:
		template<typename T>
		void output_integer(T var) {
			if (var == 0) {
				putchar_unlocked('0');
				return;
			}
			if (var < 0) {
				putchar_unlocked('-');
				var = -var;
			}
			stack_p = 0;
			while (var) {
				stack[stack_p++] = '0' + (var % 10);
				var /= 10;
			}
			while (stack_p)
				putchar_unlocked(stack[--stack_p]);
		}
		MaiPrinter& operator<<(char c) {
			putchar_unlocked(c);
			return *this;
		}
		MaiPrinter& operator<<(int var) {
			output_integer<int>(var);
			return *this;
		}
		MaiPrinter& operator<<(long long var) {
			output_integer<long long>(var);
			return *this;
		}
	};
}
MaiScanner scanner;
MaiPrinter printer;

#else
#define scanner cin
#endif

void safebreak() { static auto t = TIME; assert(MILLISEC(TIME - t) < 5000); }


// combination nCr
template<typename T>
T combi(T n, T r) {
    T p = 1;
    for (T k = 1; k <= r; k++) {
        p = p*(n - k + 1) / k;
    }
    return p;
}

int n;
int low, high;

vector<ll> items;

int main() {
	int i, j, k, a, b, c, d, x, y;
	
    cin >> n >> low >> high;

    for (i = 0; i < n; ++i) {
        items.emplace_back();
        cin >> items.back();
    }
    sort(ALL(items));

    // よいものをできるだけ少なく買ったほうが平均は良い
    ll topvalu = 0;

    
    for (i = n - low; i < n; ++i) {
        topvalu += items[i];
    }
    
    printf("%.8f\n",(double)(topvalu)/(double)low);

    ll look = items[n - low];
    
    // --------------------------------------
    l_normal:;
    
    // 下
    for (i = n - low -1; 0 <= i; --i) {
        if (look != items[i]) { break; }
    }

    // 上
    for (j = n - low + 1; j < n; ++j) {
        if (look != items[j]) {break; }
    }
    
    if (j == n){
        
        high = min(j-i-1,high);
        
        ll result = 0;
        for (ll kk = low; kk <=high; ++kk){
            result += combi((ll)(j-i-1), kk);
            fprintf(stderr,"%lld C %lld\n",(ll)(j-i-1), kk);
        }
        cout << result << endl;
        return 0;
    }

    ll nn = j - i - 1; // 個数
    ll kk = j - (n - low); // 必要数
    
    fprintf(stderr,"nn %lld / kk %lld\n",nn,kk);

    cout << combi(nn, kk) << endl;

	return 0;
}

Measured memory_bytes: 256