#include <bits/stdc++.h>
using namespace std;
struct Point {
  double x, y;
  Point(double _x = 0, double _y = 0) : x(_x), y(_y) {}
  friend bool operator<(Point a, Point b) {
    return a.x == b.x ? a.y < b.y : a.x < b.x;
  }
  friend Point operator-(Point a, Point b) {
    Point c;
    c.x = a.x - b.x;
    c.y = a.y - b.y;
    return c;
  }
} pt[100010], D;
double cross(Point a, Point b) { return a.x * b.y - a.y * b.x; }
int ss[100010];
int n, p, q, head;
double get(int a, int b) {
  if (cross(D, pt[a]) <= 0) return 1e18;
  if (cross(pt[b], D) <= 0) return 1e18;
  double x1, x2;
  x2 = (q - p * pt[a].y / pt[a].x) / (pt[b].y - pt[b].x * pt[a].y / pt[a].x);
  x1 = (p - pt[b].x * x2) / pt[a].x;
  return x1 + x2;
}
int main() {
  scanf("%d %d %d", &n, &p, &q);
  D = Point(p, q);
  for (int i = 1; i <= n; i++) scanf("%lf %lf", &pt[i].x, &pt[i].y);
  sort(pt + 1, pt + 1 + n);
  head = 1;
  ss[1] = 1;
  for (int i = 2; i <= n; i++) {
    while (head > 1 &&
           cross(pt[i] - pt[ss[head]], pt[ss[head]] - pt[ss[head - 1]]) <= 0)
      head--;
    ss[++head] = i;
  }
  double ans = 1e18;
  for (int i = 1; i <= head; i++) {
    ans = min(ans, max(p / pt[ss[i]].x, q / pt[ss[i]].y));
    if (i != head) ans = min(ans, get(ss[i], ss[i + 1]));
  }
  printf("%.8lf\n", ans);
  return 0;
}
