#include <bits/stdc++.h>
using namespace std;
int p, d;
int n, k, A;
int totlevel;
double prob(const vector<int> &level, const vector<int> &loyality, int A) {
  double prob = 0;
  for (int mask = 0; mask < d; ++mask) {
    double cprob = 1;
    int clevel = 0;
    int cnum = 0;
    int cmask = mask;
    for (int i = 0; i < ((int)(level).size()); ++i) {
      if (cmask & 1) {
        cprob *= min(1.0, loyality[i] / 100.0);
        ++cnum;
      } else {
        cprob *= 1 - min(1.0, loyality[i] / 100.0);
        clevel += level[i];
      }
      cmask >>= 1;
    }
    if (cnum >= (n + 2) >> 1) {
      prob += cprob;
    } else {
      prob += A * cprob / (A + clevel);
    }
  }
  return prob;
}
void solve() {
  cin >> n >> k >> A;
  p = 1;
  d = 1;
  int cn = 8;
  totlevel = 0;
  for (int i = 0; i < k; ++i) {
    p *= cn;
  }
  for (int i = 0; i < cn; ++i) {
    d *= 2;
  }
  vector<int> loyality(cn, 0);
  vector<int> level(cn, 0);
  set<vector<int> > was;
  for (int i = 0; i < n; ++i) {
    cin >> level[i] >> loyality[i];
    totlevel += level[i];
  }
  double mx = 0;
  vector<int> cloyality;
  for (int mask = 0; mask < p; ++mask) {
    bool good = true;
    int nmask = mask;
    int pre = -1;
    for (int i = 0; i < k; ++i) {
      int t = (nmask & 7);
      if (pre > t) {
        good = false;
        break;
      }
      pre = t;
      nmask >>= 3;
    }
    if (good) {
      cloyality = loyality;
      nmask = mask;
      for (int i = 0; i < k; ++i) {
        cloyality[(nmask & 7)] += 10;
        nmask >>= 3;
      }
      mx = max(mx, prob(level, cloyality, A));
    }
  }
  printf("%.10f\n", mx);
}
int main() {
  ios_base::sync_with_stdio(false);
  solve();
  return 0;
}
