#include <bits/stdc++.h>
using namespace std;
const int MAXN = 10;
int n, k, a, t[MAXN];
double ans;
struct Node {
  double b, l;
} w[MAXN];
inline double dfs2(int Index, double B, int kil) {
  if (Index > n) {
    if ((n - kil) * 2 > n) return 1;
    return 1.0 * a / (a + B);
  }
  double sum = dfs2(Index + 1, B, kil) * (w[Index].l + t[Index] * 10) / 100;
  sum += dfs2(Index + 1, B + w[Index].b, kil + 1) *
         (100 - w[Index].l - t[Index] * 10) / 100;
  return sum;
}
inline void dfs(int Index, int k) {
  if (Index > n) {
    ans = max(dfs2(1, 0, 0), ans);
    return;
  }
  int i;
  for (i = 0; i <= min(k * 1.0, (100 - w[Index].l) / 10); i++) {
    t[Index] = i;
    dfs(Index + 1, k - i);
  }
}
int main() {
  int i;
  scanf("%d%d%d", &n, &k, &a);
  for (i = 1; i <= n; i++) scanf("%lf%lf", &w[i].b, &w[i].l);
  dfs(1, k);
  cout.setf(ios::fixed);
  cout << fixed << setprecision(10) << ans;
  return 0;
}
