#include <bits/stdc++.h>
using namespace std;
long long GCD(long long a, long long b) { return b != 0 ? GCD(b, a % b) : a; }
long long LCM(long long a, long long b) { return a * (b / GCD(a, b)); }
long long Pow(long long n, long long e) {
  if (e == 0) return 1;
  if (e == 1)
    return n;
  else if (e & 1) {
    long long t = Pow(n, e / 2);
    return n * t * t;
  } else {
    long long t = Pow(n, e / 2);
    return t * t;
  }
}
double res = 0.0;
double prob[10];
int level[10], loyal[10];
int N, K, A;
double Prob() {
  for (int i = 0, max_ = (N); i < max_; ++i)
    prob[i] = min(100, loyal[i]) / 100.0f;
  double r = 0.0;
  for (int i = 0, max_ = (1 << N); i < max_; ++i) {
    int c = 0, B = 0;
    double p = 1.0;
    for (int j = 0, max_ = (N); j < max_; ++j) {
      if ((i >> j) & 1) {
        p *= prob[j];
        ++c;
      } else {
        p *= 1.0 - prob[j];
        B += level[j];
      }
    }
    if (c > N / 2) {
      r += p;
    } else {
      r += p * (A / (double)(A + B));
    }
  }
  return r;
}
void Solve(int id, int rem) {
  if (id == N) {
    res = max(res, Prob());
    return;
  }
  for (int i = 0, max_ = (rem + 1); i < max_; ++i) {
    loyal[id] += i * 10;
    Solve(id + 1, rem - i);
    loyal[id] -= i * 10;
  }
}
int main() {
  scanf("%d %d %d", &N, &K, &A);
  for (int i = 0, max_ = (N); i < max_; ++i)
    scanf("%d %d", &level[i], &loyal[i]);
  Solve(0, K);
  printf("%.10lf\n", res);
  return 0;
}
