unittest
{
	assert( [ "5 2 2", "1 2 3 4 5" ].parse.expand.solve == "4.500000\n1" );
	assert( [ "4 2 3", "10 20 10 10" ].parse.expand.solve == "15.000000\n3" );
	assert( [ "5 1 5", "1000000000000000 999999999999999 999999999999998 999999999999997 999999999999996" ].parse.expand.solve == "1000000000000000.000000\n1" );
	assert( [ "50 1 50", "1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1" ].parse.expand.solve == "1.000000\n1125899906842623" );
}



import std.algorithm;
import std.conv;
import std.format;
import std.range;
import std.stdio;
import std.typecons;

void main()
{
	stdin.byLineCopy.parse.expand.solve.writeln;
}

auto parse( Range )( Range input )
if( isInputRange!Range && is( ElementType!Range == string ) )
{
	auto nab = input.front.split.to!( long[] );
	input.popFront;
	auto vs = input.front.split.to!( long[] );
	return tuple( nab[ 1 ], nab[ 2 ], vs );
}

auto solve( long a, long b, long[] vs )
{
	auto m = 0.0L;
	auto p = 0L;
	auto t = 0.0L;
	auto c = 1L;
	LOOP: foreach( g; vs.sort!( ( x, y ) => y < x ).group )
	{
		for( auto i = 1L; i <= g[ 1 ] && c <= b; i++, c++ )
		{
			t += g[ 0 ];
			if( c < a ) continue;
			
			auto mm = t / c;
			auto pp = g[ 1 ].combination( i );
			if( mm < m ) break LOOP;
			
			if( m == mm ) p += pp;
			else          p  = pp;
			m = mm;
		}
	}
	return format( "%0.6f\n%s", m, p );
}

// 組み合わせ数
auto combination( long n, long k )
{
	auto r = 1L;
	for( auto d = 1L; d <= k; d++, n-- )
	{
		r *= n;
		r /= d;
	}
	return r;
}
