#include <bits/stdc++.h>
using namespace std;
int n, q[100005];
double P, Q;
struct Point {
  double x, y;
  Point(double x = 0, double y = 0) : x(x), y(y) {}
} s[100005];
Point operator+(Point A, Point B) { return Point(A.x + B.x, A.y + B.y); }
Point operator-(Point A, Point B) { return Point(A.x - B.x, A.y - B.y); }
Point operator*(Point A, double p) { return Point(A.x * p, A.y * p); }
Point operator/(Point A, double p) { return Point(A.x / p, A.y / p); }
bool operator<(const Point& a, const Point& b) {
  if (a.x == b.x) return a.y < b.y;
  return a.x < b.x;
}
const double eps = 1e-10;
int sgn(double x) {
  if (fabs(x) < eps) return 0;
  if (x < 0) return -1;
  return 1;
}
double Cross(Point A, Point B) { return A.x * B.y - A.y * B.x; }
double getCross(Point p1, Point p2, Point p) {
  return (p1.x - p.x) * (p2.y - p.y) - (p2.x - p.x) * (p1.y - p.y);
}
bool operator==(const Point& a, const Point& b) {
  if (sgn(a.x - b.x) == 0 && sgn(a.y - b.y) == 0) return true;
  return false;
}
int dcmp(double x) {
  if (fabs(x) < eps) return 0;
  if (x > eps) return 1;
  return -1;
}
bool cmp(Point u, Point v) { return u.x * v.y > v.x * u.y; }
Point GetLineIntersection(Point P, Point v, Point Q, Point w) {
  Point u = P - Q;
  double t = Cross(w, u) / Cross(v, w);
  return P + v * t;
}
bool segment_intersectLine(Point a, Point b, Point c, Point d) {
  if (dcmp(getCross(c, d, a) * getCross(c, d, b)) <= 0) return true;
  return false;
}
int main() {
  double maxx = 0, maxy = 0;
  scanf("%d%lf%lf", &n, &P, &Q);
  for (int i = 1; i <= n; i++)
    scanf("%lf%lf", &s[i].x, &s[i].y), maxx = max(maxx, (double)s[i].x),
                                       maxy = max(maxy, (double)s[i].y);
  s[n + 1].x = maxx, s[n + 1].y = 0;
  s[n + 2].x = 0, s[n + 2].y = maxy;
  s[n + 3].x = 0, s[n + 3].y = 0;
  swap(s[1], s[n + 3]);
  sort(s + 2, s + n + 3 + 1, cmp);
  int top;
  q[top = 1] = 1;
  for (int i = 1; i <= n + 3; i++) {
    while (top > 1 &&
           dcmp(Cross((s[q[top]] - s[q[top - 1]]), s[i] - s[q[top]])) <= 0)
      top--;
    q[++top] = i;
  }
  double ans = 1000000000.0;
  for (int i = 3; i <= top; i++) {
    if (segment_intersectLine(s[q[i - 1]], s[q[i]], Point(0, 0), Point(P, Q))) {
      Point xx;
      if (dcmp(Cross(s[q[i]] - s[q[i - 1]], Point(P, Q))) == 0)
        xx = s[q[i]];
      else
        xx = GetLineIntersection(s[q[i - 1]], s[q[i]] - s[q[i - 1]],
                                 Point(0, 0), Point(P, Q));
      ans = min(ans, max(P / xx.x, Q / xx.y));
    }
  }
  printf("%.10lf\n", ans);
  return 0;
}
