#include <bits/stdc++.h>
using namespace std;
struct Sena {
  int level;
  int loy;
  bool operator<(const Sena& other) const { return loy < other.loy; }
} sena[8];
double ans;
int n, k, A;
double cal(int now, double prob, int nPos, int B) {
  if (now >= n) {
    if (nPos * 2 > n)
      return prob;
    else
      return prob * ((double)A / (A + B));
  }
  return cal(now + 1, prob * sena[now].loy / 100.0, nPos + 1, B) +
         cal(now + 1, prob * (100 - sena[now].loy) / 100.0, nPos,
             B + sena[now].level);
}
void vote(int now, int candy, int maxGive) {
  if (maxGive < candy) return;
  if (now >= n) {
    ans = max(cal(0, 1.0, 0, 0), ans);
    return;
  }
  for (int give = 0; give <= candy && give * 10 + sena[now].loy <= 100;
       ++give) {
    sena[now].loy += give * 10;
    vote(now + 1, candy - give, maxGive - ((100 - sena[now].loy) / 10));
    sena[now].loy -= give * 10;
  }
}
int main() {
  while (scanf("%d%d%d", &n, &k, &A) == 3) {
    int maxGive = 0;
    for (int i = 0; i < n; ++i) {
      scanf("%d%d", &sena[i].level, &sena[i].loy);
      maxGive += (100 - sena[i].loy) / 10;
    }
    sort(sena, sena + n);
    int unloy = 0;
    for (int i = 0; i * 2 <= n; ++i) unloy += 100 - sena[n - 1 - i].loy;
    if (maxGive <= k || unloy / 10 <= k)
      ans = 1;
    else {
      ans = 0;
      vote(0, k, maxGive);
    }
    printf("%.8f\n", ans);
  }
}
