#include <bits/stdc++.h>
using namespace std;
struct Point {
  double x, y;
  friend bool operator<(Point a, Point b) {
    if (a.x == b.x) return a.y < b.y;
    return 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;
  }
} point[110000];
double cross(Point a, Point b) { return a.x * b.y - b.x * a.y; }
int s[110000];
int n, p, q, top;
double get(int a, int b) {
  double x = cross(point[b], point[a]);
  double y = p * point[a].y - q * point[a].x;
  if (fabs(x) < 1e-10) return 1e20;
  double t = y / x, tplus = (p - point[b].x * t) / point[a].x;
  if (t < 0 || tplus < 0) return 1e20;
  return t + tplus;
}
int main() {
  scanf("%d %d %d", &n, &p, &q);
  for (int i = 1; i <= n; i++) scanf("%lf %lf", &point[i].x, &point[i].y);
  sort(point + 1, point + 1 + n);
  top = 1;
  s[1] = 1;
  for (int i = 2; i <= n; i++) {
    while (top > 1 && cross(point[i] - point[s[top]],
                            point[s[top]] - point[s[top - 1]]) <= 0)
      top--;
    s[++top] = i;
  }
  double ans = 1e20;
  for (int i = 1; i <= top; i++) {
    ans = min(ans, max(p / point[s[i]].x, q / point[s[i]].y));
    if (i != top) ans = min(ans, get(s[i], s[i + 1]));
  }
  printf("%.11lf\n", ans);
}
