#include <bits/stdc++.h>
using namespace std;
int read() {
  int ret = 0;
  char c = getchar();
  while (c < '0' || c > '9') c = getchar();
  while (c >= '0' && c <= '9') {
    ret = ret * 10 + c - '0';
    c = getchar();
  }
  return ret;
}
const int MAXN = 100000, MAXP = 1000000;
pair<double, double> A[MAXN + 10];
pair<double, double> B[MAXN + 10];
int top;
int n, p, q;
bool check(double t) {
  double np = 0, nq = 0;
  np = B[1].first * t;
  nq = B[1].second * t;
  if (np + 1e-8 < p) return false;
  if (np + 1e-8 >= p && nq + 1e-8 >= q) return true;
  double ls = t;
  for (int i = 2; i <= top; i++) {
    double deta = np - p;
    double ct = deta / (B[i - 1].first - B[i].first);
    if (ct == 0) return false;
    if (ct >= ls) {
      np = np - B[i - 1].first * ls + B[i].first * ls;
      nq = nq - B[i - 1].second * ls + B[i].second * ls;
    } else {
      np = np - B[i - 1].first * ct + B[i].first * ct;
      nq = nq - B[i - 1].second * ct + B[i].second * ct;
      ls = ct;
    }
    if (np + 1e-8 >= p && nq + 1e-8 >= q) return true;
  }
  return false;
}
void init() {
  n = read(), p = read(), q = read();
  for (int i = 1; i <= n; i++) {
    int first = read(), second = read();
    A[i] = make_pair(first, second);
  }
  sort(A + 1, A + n + 1);
  for (int i = n; i >= 1; i--)
    if (!top || (A[i].first < B[top].first && A[i].second > B[top].second)) {
      while (top >= 2 &&
             (A[i].second - B[top].second) * (B[top - 1].first - B[top].first) >
                 (B[top].second - B[top - 1].second) *
                     (B[top].first - A[i].first))
        top--;
      B[++top] = A[i];
    }
  double l = 0, r = MAXP, ans = 0;
  while (l + 1e-8 <= r) {
    double mid = (l + r) * 0.5;
    if (check(mid)) {
      ans = mid;
      r = mid;
    } else
      l = mid;
  }
  printf("%.10lf\n", ans);
  return;
}
int main() {
  init();
  return 0;
}
