#include <bits/stdc++.h>
using namespace std;
int n;
double p, q;
complex<double> ps[100010];
inline double cross(complex<double> a, complex<double> b) {
  return a.real() * b.imag() - a.imag() * b.real();
}
bool cmp(complex<double> a, complex<double> b) {
  double c = cross(a, b);
  if (c == 0) return a.real() + a.imag() < b.real() + b.imag();
  return c > 0;
}
inline bool isl(complex<double> a, complex<double> b, complex<double> c) {
  return cross(b - a, c - a) > 0;
}
vector<complex<double> > convex;
bool calc(double time) {
  for (int i = 0; i < convex.size() - 1; i++) {
    complex<double> a = convex[i] * time, b = complex<double>(p, q),
                    c = convex[i + 1] * time;
    if (cmp(a, b) && cmp(b, c) && !isl(a, b, c)) return true;
  }
  return false;
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> p >> q;
  int mxa = 0, mxb = 0;
  for (int i = 0; i < n; i++) {
    int a, b;
    cin >> a >> b;
    ps[i] = complex<double>(a, b);
    mxa = max(mxa, a);
    mxb = max(mxb, b);
  }
  ps[n] = complex<double>(mxa, 0);
  ps[n + 1] = complex<double>(0, mxb);
  n += 2;
  sort(ps, ps + n, cmp);
  for (int i = 0; i < n; i++) {
    while (convex.size() >= 2 &&
           !isl(convex[convex.size() - 2], convex.back(), ps[i]))
      convex.pop_back();
    convex.push_back(ps[i]);
  }
  double l = 0, r = max(p, q);
  while (r - l > 1e-7) {
    double mid = (l + r) / 2;
    if (calc(mid))
      r = mid;
    else
      l = mid;
  }
  cout << fixed << setprecision(10) << (l + r) / 2 << endl;
}
