#include <bits/stdc++.h>
using namespace std;
vector<string> split(string s, string delimiter = " ") {
  vector<string> res;
  string word = "";
  for (typeof((s).begin()) it = (s).begin(); it != (s).end(); ++it)
    if (find(delimiter.begin(), delimiter.end(), *it) == delimiter.end())
      word += *it;
    else {
      res.push_back(word);
      word = "";
    }
  res.push_back(word);
  return res;
}
int string2int(string s) {
  istringstream i(s);
  int x;
  i >> x;
  return x;
}
long long string2LL(string s) {
  istringstream i(s);
  long long x;
  i >> x;
  return x;
}
string int2string(int n) {
  ostringstream o;
  o << n;
  return o.str();
}
vector<int> string2VI(string s, string delimiter = " ") {
  vector<string> v = split(s, delimiter);
  vector<int> res;
  for (typeof((v).begin()) it = (v).begin(); it != (v).end(); ++it)
    res.push_back(string2int(*it));
  return res;
}
vector<int> string2VLL(string s, string delimiter = " ") {
  vector<string> v = split(s, delimiter);
  vector<int> res;
  for (typeof((v).begin()) it = (v).begin(); it != (v).end(); ++it)
    res.push_back(string2LL(*it));
  return res;
}
string mergeVS(vector<string> v) {
  string s;
  for (typeof((v).begin()) it = (v).begin(); it != (v).end(); ++it) s += *it;
  return s;
}
template <class T>
inline T checkmin(T &a, T b) {
  if (b < a) a = b;
  return a;
}
template <class T>
inline T checkmax(T &a, T b) {
  if (b > a) a = b;
  return a;
}
template <class T>
T gcd(T a, T b) {
  if (b == 0)
    return a;
  else
    return gcd(b, a % b);
}
template <class T>
T gcdv(vector<T> v) {
  if (v.size() == 1)
    return v[0];
  else
    return gcd(v[0], gcdv(vector<T>(v.begin() + 1, v.end())));
}
template <class T>
T lcm(T a, T b) {
  return a / gcd(a, b) * b;
}
template <class T>
T lcmv(vector<T> v) {
  if (v.size() == 1)
    return v[0];
  else
    return lcm(v[0], lcmv(vector<T>(v.begin() + 1, v.end())));
}
int LOWBIT(int n) { return (n ^ (n - 1)) & n; }
int COUNTBIT(int n) { return __builtin_popcount(n); }
long long CHOOSE(long long N, long long K) {
  long long res = 1;
  for (int i = 0; i < (int)(K); ++i) {
    res *= N - i;
    res /= i + 1;
  }
  return res;
}
template <class T>
T ceilfrac(T a, T b) {
  if (a % b)
    return a / b + 1;
  else
    return a / b;
}
int n, k, A;
int p[8];
int lv[8];
set<vector<int> > s, t;
void gen_partitions(int k) {
  if (k == 0) {
    t.clear();
    vector<int> v(n, 0);
    t.insert(v);
  } else {
    s.clear();
    for (typeof((t).begin()) it = (t).begin(); it != (t).end(); ++it) {
      for (int i = 0; i < (int)(*it).size(); i++) {
        vector<int> u = *it;
        u[i]++;
        sort(u.begin(), u.end());
        s.insert(u);
      }
    }
    swap(s, t);
  }
}
int main(int argc, char *argv[]) {
  cin >> n >> k >> A;
  for (int i = 0; i < n; i++) cin >> lv[i] >> p[i];
  for (int i = 0; i <= k; i++) gen_partitions(i);
  double res = 0;
  vector<int> pp(n, 0);
  for (typeof((t).begin()) it = (t).begin(); it != (t).end(); ++it) {
    vector<int> c = *it;
    do {
      for (int i = 0; i < n; i++) pp[i] = min(100, p[i] + 10 * c[i]);
      double sum = 0;
      for (int S = 0; S < (1 << n); S++) {
        double P = 1;
        for (int i = 0; i < n; i++) {
          if (S & (1 << i))
            P *= pp[i] / 100.0;
          else
            P *= (100 - pp[i]) / 100.0;
        }
        double q = 1;
        int nS = __builtin_popcount(S);
        if (nS <= n - nS) {
          double B = 0;
          for (int j = 0; j < n; j++)
            if ((S & (1 << j)) == 0) B += lv[j];
          q = A / (A + B);
        }
        sum += P * q;
      }
      checkmax(res, sum);
    } while (next_permutation(c.begin(), c.end()));
  }
  cout << res << endl;
  return 0;
}
