#include <bits/stdc++.h>
using namespace std;
const int inf = 1000000000;
const double pi = acos(-1.0);
template <class T>
T& ls(T& a, T b) {
  if (b < a) a = b;
  return a;
}
template <class T>
T& gs(T& a, T b) {
  if (b > a) a = b;
  return a;
}
inline int to_i(const string& s) {
  int n;
  sscanf(s.c_str(), "%d", &n);
  return n;
}
inline string to_s(int n) {
  char buf[32];
  sprintf(buf, "%d", n);
  return string(buf);
}
inline int rd() {
  int x;
  scanf("%d", &x);
  return x;
}
template <int N>
struct bits {
  int a[N];
  bits() {
    a[0] = 0;
    for (int i = 1; i < N; i++) {
      a[i] = a[i >> 1] + (i & 1);
    }
  }
  int operator()(int i) const { return a[i]; }
};
vector<int> vc;
bits<500000> bit;
int n, m, p, q;
struct node {
  int x, y;
  node() {}
  node(int aa, int bb) {
    x = aa;
    y = bb;
  }
} a[1030];
double ans;
void calc() {
  int i, j;
  double sum = 0;
  for (i = 0; i < (int)vc.size(); i++) {
    int b = 0;
    double tp = 1;
    int now = vc[i];
    for (j = 0; j < n; j++) {
      int nj = 1 << j;
      double w = ((double)a[j].y) / (double)100;
      if (nj & now) {
        tp *= w;
      } else {
        tp *= (1 - w);
        b += a[j].x;
      }
    }
    tp = tp * (1 - ((double)p / (double)(p + b)));
    sum += tp;
  }
  ans = min(sum, ans);
}
void dfs(int u, int k) {
  if (u == n) {
    calc();
    return;
  }
  int i, j;
  int x = a[u].x, y = a[u].y;
  for (i = 0; i <= k; i++) {
    if (10 * i + y <= 100) {
      a[u].y = 10 * i + y;
      dfs(u + 1, k - i);
    } else
      break;
  }
  a[u].y = y;
}
int main() {
  int i, j, k;
  while (scanf("%d%d%d", &n, &k, &p) != EOF) {
    memset(a, 0, sizeof(a));
    int x, y, half;
    half = n / 2 + 1;
    ans = (double)inf;
    vc.clear();
    for (i = 0; i < (1 << n); i++)
      if (bit(i) < half) vc.push_back(i);
    for (i = 0; i < n; i++) {
      x = rd();
      y = rd();
      a[i] = node(x, y);
    }
    dfs(0, k);
    ans = 1 - ans;
    printf("%.10lf\n", ans);
  }
}
