
#include <iostream>
#include <fstream>
#include <algorithm>
#include <string>
#include <set>
#include <map>
#include <vector>
#include <math.h>

using namespace std;

typedef long long LL;
typedef vector<int> vi;

const int B = 10;
const int T = 107;

map<int, double> dp[1 << B][T];

struct S
{
	double s;
	double p;
	int mask;

	bool operator < (const S& rhs) const
	{
		return s * p > rhs.s * rhs.p;
	}
};

vector<S> v;

int t;

double D(int mask, int pos, int k)
{
	if (pos == v.size() || k == t)
		return 0;

	if (mask & v[pos].mask)
		return D(mask, pos + 1, k);

	double& res = dp[mask][pos][k];
	if (res > 1)
		return res - 2;

	res = 2;

	res += v[pos].p * (v[pos].s + D(mask | v[pos].mask, pos + 1, k + 1));
	res += (1 - v[pos].p) * D(mask, pos + 1, k + 1);

	return res - 2;
}

int main()
{
	int b;
	double f;
	cin >> b >> t >> f;

	for (int i = 0; i < b; ++i)
	{
		S s;
		s.mask = 1 << i;

		cin >> s.p >> s.s;

		for (int j = 0; j < t; ++j)
		{
			v.push_back(s);
			s.p *= f;
		}
	}

	sort(v.begin(), v.end());

	double res = D(0, 0, 0);

	printf("%0.9lf\n", res);

	return 0;
}