#include <bits/stdc++.h>
using namespace std;
template <class T1, class T2>
ostream& operator<<(ostream& os, const pair<T1, T2>& p) {
  os << "{" << p.first << ", " << p.second << "}";
  return os;
}
template <class T>
ostream& operator<<(ostream& os, const vector<T>& p) {
  os << "[";
  int i = 0;
  for (typename vector<T>::const_iterator it = p.begin(); it != p.end(); ++it) {
    os << (i == 0 ? "" : ", ") << *it;
    i++;
  }
  os << "]";
  return os;
}
template <class T>
ostream& operator<<(ostream& os, const set<T>& p) {
  os << "[";
  int i = 0;
  for (typename set<T>::const_iterator it = p.begin(); it != p.end(); ++it) {
    os << (i == 0 ? "" : ", ") << *it;
    i++;
  }
  os << "]";
  return os;
}
template <class K, class V>
ostream& operator<<(ostream& os, const map<K, V>& p) {
  os << "[";
  int i = 0;
  for (typename map<K, V>::const_iterator it = p.begin(); it != p.end(); ++it) {
    os << (i == 0 ? "" : ", ") << *it;
    i++;
  }
  os << "]";
  return os;
}
template <class T>
string toString(const T& o) {
  stringstream ss;
  ss << o;
  string ret;
  getline(ss, ret);
  return ret;
}
template <class T>
vector<T> subv(const vector<T>& v, int from, int to) {
  return vector<T>(v.begin() + min(max(0, from), (int)v.size()),
                   v.begin() + min(max(0, to), (int)v.size()));
}
pair<int, int> operator+(const pair<int, int>& a, const pair<int, int>& b) {
  return make_pair(a.first + b.first, a.second + b.second);
}
pair<int, int> operator*(const int& a, const pair<int, int>& b) {
  return make_pair(a * b.first, a * b.second);
}
int n, k, A;
vector<int> lo, le;
vector<int> bon;
double best = 0.;
double prob() {
  vector<double> nlo(n);
  for (int i = 0; i < n; ++i) nlo[i] = min(100, (lo[i] + 10 * bon[i])) / 100.;
  double ret = 0.;
  for (int i = 0; i < (1 << n); ++i) {
    int on = 0;
    double p = 1., B = 0.;
    for (int j = 0; j < n; ++j) {
      if (i & (1 << j)) {
        p *= nlo[j];
        on++;
      } else {
        p *= 1 - nlo[j];
        B += le[j];
      }
    }
    if (2 * on > n)
      ret += p;
    else
      ret += p * A / (A + B);
  }
  return ret;
}
void solve(int pos, int rest) {
  if (pos == n) {
    best = max(best, prob());
    return;
  }
  for (int i = 0; i < rest + 1; ++i) {
    bon[pos] = i;
    solve(pos + 1, rest - i);
  }
}
int main() {
  cin >> n >> k >> A;
  lo = vector<int>(n);
  le = vector<int>(n);
  bon = vector<int>(n);
  for (int i = 0; i < n; ++i) cin >> le[i] >> lo[i];
  solve(0, k);
  cout.precision(10);
  cout << fixed << best << endl;
  return 0;
}
