#include <bits/stdc++.h>
using namespace std;
struct point {
  long long int x, y;
  point() {}
  point(long long int inx, long long int iny) {
    x = inx;
    y = iny;
  }
};
point leer() {
  int x, y;
  cin >> x >> y;
  return point(x, y);
}
point operator-(point p1, point p2) {
  p1.x -= p2.x;
  p1.y -= p2.y;
  return p1;
}
long long int prodvec(point p1, point p2) { return p1.x * p2.y - p1.y * p2.x; }
long long int sq(point p) { return p.x * p.x + p.y * p.y; }
bool operator<(point p1, point p2) {
  long long int pv = prodvec(p1, p2);
  if (pv > 0) return true;
  if (pv < 0) return false;
  return sq(p1) < sq(p2);
}
int n;
point b;
point vp[1000000];
int main() {
  ios::sync_with_stdio(false);
  cout.setf(ios::fixed);
  cout.precision(12);
  cin >> n;
  b = leer();
  long long int maxx = 0, maxy = 0;
  for (int i = 0; i < n; i++) {
    vp[i] = leer();
    maxx = max(maxx, vp[i].x);
    maxy = max(maxy, vp[i].y);
  }
  vp[n++] = point(maxx, 0);
  vp[n++] = point(0, maxy);
  sort(vp, vp + n);
  vector<point> v;
  for (int i = 0; i < n; i++) {
    point p = vp[i];
    while (int(v.size()) >= 2 and
           prodvec(v.back() - v[int(v.size()) - 2], p - v.back()) <= 0)
      v.pop_back();
    v.push_back(p);
  }
  int ind = 0;
  while (prodvec(b, v[ind + 1]) <= 0) ind++;
  point p1 = v[ind];
  point p2 = v[ind + 1];
  double t1 = double(prodvec(b, p2)) / double(prodvec(p1, p2));
  double t2 = double(prodvec(p1, b)) / double(prodvec(p1, p2));
  cout << t1 + t2 << endl;
}
