#include <bits/stdc++.h>
template <typename T>
inline void SWAP(T &a, T &b) {
  T tmp = a;
  a = b;
  b = tmp;
}
template <typename T>
inline T ABS(const T &val) {
  return val < 0 ? -val : val;
}
template <typename T>
inline T MAX(const T &a, const T &b) {
  return a > b ? a : b;
}
template <typename T>
inline T MIN(const T &a, const T &b) {
  return a < b ? a : b;
}
const int INTinf = 2147483647;
const int nINTinf = 0 - 2147483648;
using namespace std;
int n, m, a, n2;
int lvl[10];
int rasp[10];
long double MX = 0.0;
long double tmp;
void calc(int pos, long double chance, int sum, int acc) {
  if (pos == n) {
    if (acc > n2) {
      tmp += chance;
    } else if (sum == 0) {
      tmp += chance;
    } else {
      tmp += (chance * a) / (a + sum);
    }
  } else if (rasp[pos] >= 10) {
    calc(pos + 1, chance, sum, acc + 1);
  } else if (rasp[pos]) {
    calc(pos + 1, (chance * rasp[pos]) / 10, sum, acc + 1);
    calc(pos + 1, (chance * (10 - rasp[pos])) / 10, sum + lvl[pos], acc);
  } else
    calc(pos + 1, chance, sum + lvl[pos], acc);
}
void konf(int kol, int pos) {
  if (!kol) {
    tmp = 0.0;
    calc(0, 1, 0, 0);
    if (tmp > MX) MX = tmp;
  } else if (pos == n - 1) {
    rasp[pos] += kol;
    tmp = 0.0;
    calc(0, 1, 0, 0);
    if (tmp > MX) MX = tmp;
    rasp[pos] -= kol;
  } else {
    int mmm = MIN(kol, 10 - rasp[pos]);
    for (int i = -1 + 1; i <= mmm; i++) {
      konf(kol - i, pos + 1);
      rasp[pos]++;
    }
    rasp[pos] -= mmm + 1;
  }
}
int main() {
  cin >> n >> m >> a;
  n2 = n >> 1;
  for (int i = 0; i != n; i++) {
    cin >> lvl[i] >> rasp[i];
    rasp[i] /= 10;
  }
  konf(m, 0);
  cout.setf(ios_base::fixed);
  cout.precision(10);
  cout << MX << endl;
  return 0;
}
