#include <bits/stdc++.h>
using namespace std;
using db = double;
using ll = long long;
using ull = unsigned long long;
using pII = pair<int, int>;
using pLL = pair<ll, ll>;
constexpr int mod = 1e9 + 7;
template <class T1, class T2>
inline void chadd(T1 &x, T2 y, int Mod = mod) {
  x += y;
  while (x >= Mod) x -= Mod;
  while (x < 0) x += Mod;
}
template <class T1, class T2>
inline void chmax(T1 &x, T2 y) {
  if (x < y) x = y;
}
template <class T1, class T2>
inline void chmin(T1 &x, T2 y) {
  if (x > y) x = y;
}
inline int nextInt() {
  int x;
  cin >> x;
  return x;
}
void rd() {}
template <class T, class... Ts>
void rd(T &arg, Ts &...args) {
  cin >> arg;
  rd(args...);
}
void err() {
  cout << "\033[39;0m"
       << "\n";
}
template <class T, class... Ts>
void err(const T &arg, const Ts &...args) {
  cout << arg << ' ';
  err(args...);
}
template <template <typename...> class T, typename t, typename... A>
void err(const T<t> &arg, const A &...args) {
  for (auto &v : arg) cout << v << ' ';
  err(args...);
}
void ptt() { cout << "\n"; }
template <class T, class... Ts>
void ptt(const T &arg, const Ts &...args) {
  cout << ' ' << arg;
  ptt(args...);
}
template <class T, class... Ts>
void pt(const T &arg, const Ts &...args) {
  cout << arg;
  ptt(args...);
}
void pt() {}
template <template <typename...> class T, typename t, typename... A>
void pt(const T<t> &arg, const A &...args) {
  for (int i = 0, sze = arg.size(); i < sze; ++i)
    cout << arg[i] << " \n"[i == sze - 1];
  pt(args...);
}
inline ll qpow(ll base, ll n) {
  assert(n >= 0);
  ll res = 1;
  while (n) {
    if (n & 1) res = res * base % mod;
    base = base * base % mod;
    n >>= 1;
  }
  return res;
}
const db eps = 1e-8;
const db PI = acos(-1.0);
int sgn(db x) {
  if (fabs(x) < eps) return 0;
  return x < 0 ? -1 : 1;
}
constexpr int N = 1e5 + 10;
int n, p, q, a[N], b[N];
struct Point {
  db x, y;
  Point(db x = 0, db y = 0) : x(x), y(y) {}
  void scan() { rd(x, y); }
  void print() { printf("%.11f %.11f\n", x, y); }
  bool operator==(const Point &b) const {
    return sgn(x - b.x) == 0 && sgn(y - b.y) == 0;
  }
  bool operator<(const Point &b) const {
    return sgn(x - b.x) == 0 ? sgn(y - b.y) < 0 : x < b.x;
  }
  Point operator+(const Point &b) const { return Point(x + b.x, y + b.y); }
  Point operator-(const Point &b) const { return Point(x - b.x, y - b.y); }
  Point operator*(const db &b) const { return Point(x * b, y * b); }
  Point operator/(const db &b) const { return Point(x / b, y / b); }
  db operator^(const Point &b) const { return x * b.y - y * b.x; }
  db operator*(const Point &b) const { return x * b.x + y * b.y; }
  db len() { return norm(complex<db>(x, y)); }
  db len2() { return x * x + y * y; }
  db dis(Point b) { return norm(complex<db>(x - b.x, y - b.y)); }
  db dis2(Point b) { return (x - b.x) * (x - b.x) + (y - b.y) * (y - b.y); }
  int quad() {
    int _x = sgn(x), _y = sgn(y);
    if (_x > 0 && _y >= 0) return 1;
    if (_x <= 0 && _y > 0) return 2;
    if (_x < 0 && _y <= 0) return 3;
    if (_x >= 0 && _y < 0) return 4;
  }
  db getRad(Point a, Point b) {
    Point p = *this;
    return fabs(atan2(fabs((a - p) ^ (b - p)), (a - p) * (b - p)));
  }
  Point normal() { return Point(-y, x) / len(); }
  Point trunc(db r) {
    db l = len();
    if (!sgn(l)) return *this;
    r /= l;
    return Point(x * r, y * r);
  }
  Point rotleft() { return Point(-y, x); }
  Point rotright() { return Point(y, -x); }
  Point rotate(Point p, db rad) {
    Point v = (*this) - p;
    db c = cos(rad), s = sin(rad);
    return Point(p.x + v.x * c - v.y * s, p.y + v.x * s + v.y * c);
  }
};
struct Line {
  Point s, e;
  Line() {}
  Line(Point s, Point e) : s(s), e(e) {}
  void scan() {
    s.scan();
    e.scan();
  }
  void print() {
    s.print();
    e.print();
  }
  bool operator==(const Line &b) const { return s == b.s && e == b.e; }
  Line(Point p, db rad) {
    s = p;
    if (sgn(rad - PI / 2) == 0) {
      e = (s + Point(0, 1));
    } else {
      e = (s + Point(1, tan(rad)));
    }
  }
  Line(db a, db b, db c) {
    if (sgn(a) == 0) {
      s = Point(0, -c / b);
      e = Point(1, -c / b);
    } else if (sgn(b) == 0) {
      s = Point(-c / a, 0);
      e = Point(-c / a, 1);
    } else {
      s = Point(0, -c / b);
      e = Point(1, (-c - a) / b);
    }
  }
  void adjust() {
    if (e < s) swap(s, e);
  }
  db length() { return s.dis(e); }
  db getAngle() {
    db k = atan2(e.y - s.y, e.x - s.x);
    if (sgn(k) < 0) k += PI;
    if (sgn(k - PI) == 0) k -= PI;
    return k;
  }
  int relationPoint(Point p) {
    int c = sgn((p - s) ^ (e - s));
    if (c < 0) return 1;
    if (c > 0) return 2;
    return 3;
  }
  bool pointOnSeg(Point p) {
    return sgn((p - s) ^ (e - s)) == 0 && sgn((p - s) * (p - e)) <= 0;
  }
  bool parallel(Line b) { return sgn((e - s) ^ (b.e - b.s)) == 0; }
  int segCrossSeg(Line b) {
    int d1 = sgn((e - s) ^ (b.s - s));
    int d2 = sgn((e - s) ^ (b.e - s));
    int d3 = sgn((b.e - b.s) ^ (s - b.s));
    int d4 = sgn((b.e - b.s) ^ (e - b.s));
    if ((d1 ^ d2) == -2 && (d3 ^ d4) == -2) return 2;
    return ((d1 == 0 && sgn((b.s - s) * (b.s - e)) <= 0) ||
            (d2 == 0 && sgn((b.e - s) * (b.e - e)) <= 0) ||
            (d3 == 0 && sgn((s - b.s) * (s - b.e)) <= 0) ||
            (d4 == 0 && sgn((e - b.s) * (e - b.e)) <= 0));
  }
  int lineCrossSeg(Line b) {
    int d1 = sgn((e - s) ^ (b.s - s));
    int d2 = sgn((e - s) ^ (b.e - s));
    if ((d1 ^ d2) == -2) return 2;
    return (d1 == 0 || d2 == 0);
  }
  int lineCrossLine(Line b) {
    if ((*this).parallel(b)) return b.relationPoint(s) == 3;
    return 2;
  }
  Point crossPoint(Line b) {
    db a1 = (b.e - b.s) ^ (s - b.s);
    db a2 = (b.e - b.s) ^ (e - b.s);
    return Point((s.x * a2 - e.x * a1) / (a2 - a1),
                 (s.y * a2 - e.y * a1) / (a2 - a1));
  }
  db disPointToLine(Point p) { return fabs((p - s) ^ (e - s)) / length(); }
  db disPointToSeg(Point p) {
    if (sgn((p - s) * (e - s)) < 0 || sgn((p - e) * (s - e)) < 0)
      return min(p.dis(s), p.dis(e));
    return disPointToLine(p);
  }
  db disSegToSeg(Line b) {
    return min(min(disPointToSeg(b.s), disPointToSeg(b.e)),
               min(b.disPointToSeg(s), b.disPointToSeg(e)));
  }
  Point lineProg(Point p) {
    return s + (((e - s) * ((e - s) * (p - s))) / ((e - s).len2()));
  }
  Point symmetryPoint(Point p) {
    Point q = lineProg(p);
    return Point(q.x * 2 - p.x, q.y * 2 - p.y);
  }
};
struct Polygon {
  vector<Point> p;
  Polygon() { p.clear(); }
  Polygon(int n) {
    p.clear();
    p.resize(n);
  }
  int sze() { return p.size(); }
  Point &operator[](int x) { return p[(x + sze()) % sze()]; }
  void add(Point q) { p.push_back(q); }
  void scan(int n = -1) {
    if (n == -1) scanf("%d", &n);
    (*this) = Polygon(n);
    for (int i = 0; i < n; ++i) p[i].scan();
  }
  vector<Line> getline() {
    vector<Line> l(sze());
    for (int i = 0; i < sze(); ++i) {
      int j = (i + 1) % sze();
      l[i] = Line(p[i], p[j]);
    }
    return l;
  }
  void convexHull(int opt = 1) {
    sort(p.begin(), p.end());
    Polygon res;
    res.p.resize(sze() * 2);
    int top = -1;
    for (int i = 0; i < sze(); ++i) {
      while (top > 0 &&
             sgn((res[top] - res[top - 1]) ^ (p[i] - res[top - 1])) < opt)
        --top;
      res[++top] = p[i];
    }
    int pre = top;
    for (int i = sze() - 2; i >= 0; --i) {
      while (top > pre &&
             sgn((res[top] - res[top - 1]) ^ (p[i] - res[top - 1])) < opt)
        --top;
      res[++top] = p[i];
    }
    if (top > 0) res.p.resize(top);
    p = res.p;
  }
};
void run() {
  db ans = 1e18;
  for (int i = 1; i <= n; ++i) rd(a[i], b[i]);
  for (int i = 1; i <= n; ++i) {
    chmin(ans, max(p * 1.0 / a[i], q * 1.0 / b[i]));
  }
  Polygon po;
  for (int i = 1; i <= n; ++i) po.add(Point((db)a[i], (db)b[i]));
  po.convexHull();
  vector<Line> li(po.getline());
  Line base = Line(Point(0, 0), Point((db)p, (db)q));
  for (auto &it : li) {
    Point now = base.crossPoint(it);
    if (sgn(now.x) > 0 && sgn(now.y) > 0 && it.pointOnSeg(now)) {
      chmin(ans, p * 1.0 / (db)now.x);
    }
  }
  pt(ans);
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.tie(nullptr);
  cout << fixed << setprecision(20);
  while (cin >> n >> p >> q) run();
  return 0;
}
