#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 10;
const double eps = 1e-8;
const double inf = 1e16;
int n;
struct Point {
  double x, y, agl;
  Point() {}
  Point(double x, double y) : x(x), y(y) {}
  friend Point operator+(const Point &p, const Point &q) {
    return Point(p.x + q.x, p.y + q.y);
  }
  friend Point operator-(const Point &p, const Point &q) {
    return Point(p.x - q.x, p.y - q.y);
  }
  friend Point operator*(const Point &p, const double &t) {
    return Point(p.x * t, p.y * t);
  }
  friend double operator*(const Point &p, const Point &q) {
    return p.x * q.y - p.y * q.x;
  }
  friend bool operator<(const Point &p, const Point &q) {
    return fabs(p.agl - q.agl) > eps ? p.agl < q.agl : p.y > q.y;
  }
} p[maxn];
struct Line {
  Point p, v;
  Line() {}
  Line(Point p, Point v) : p(p), v(v) {}
} l[maxn], L;
int top;
Point get_intersection(Line l1, Line l2) {
  Point u = l1.p - l2.v;
  double t = (l2.v * u) / (l1.v * l2.v);
  return l1.p + l1.v * t;
}
bool on_left(Line l, Point p) { return l.v * (p - l.p) > eps; }
bool on_line(Line l, Point p) {
  Point q = l.p + l.v;
  double min_x = min(l.p.x, q.x), max_x = max(l.p.x, q.x);
  double min_y = min(l.p.y, q.y), max_y = max(l.p.y, q.y);
  return min_x <= p.x + eps && p.x <= max_x + eps && min_y <= p.y + eps &&
         p.y <= max_y + eps;
}
void get_convex_hall() {
  double min_y = inf;
  int pos;
  for (int i = 0; i < n; ++i)
    if (p[i].y < min_y || (fabs(p[i].y - min_y) <= eps && p[i].x < p[pos].x))
      pos = i, min_y = p[i].y;
  swap(p[0], p[pos]);
  for (int i = 1; i < n; ++i)
    p[i].agl = atan2(p[i].y - p[0].y, p[i].x - p[0].x);
  sort(p + 1, p + n);
  Point last = p[0];
  for (int i = 1; i < n; ++i) {
    if ((i ^ 1) && fabs(p[i].agl - p[i - 1].agl) <= eps) continue;
    while (top && !on_left(l[top], p[i])) top--;
    if (top) last = l[top].p + l[top].v;
    l[++top] = Line(last, p[i] - last);
  }
  last = l[top].p + l[top].v;
  l[++top] = Line(last, p[0] - last);
  Point ans = Point(0, 0);
  for (int i = 1; i <= top; ++i) {
    Point now = get_intersection(l[i], L);
    if (on_line(l[i], now) && now.y > ans.y) ans = now;
  }
  printf("%.16lf\n", L.v.y / ans.y);
}
int main() {
  scanf("%d%lf%lf", &n, &L.v.x, &L.v.y);
  L.p = Point(0, 0);
  double max_a = -inf, max_b = -inf;
  for (int i = 0; i < n; ++i) {
    scanf("%lf%lf", &p[i].x, &p[i].y);
    max_a = max(max_a, p[i].x);
    max_b = max(max_b, p[i].y);
  }
  p[n++] = Point(max_a, 0), p[n++] = Point(0, max_b);
  get_convex_hall();
}
