#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const long long LINF = 0x3f3f3f3f3f3f3f3fll;
const double DINF = 1e18;
const double pi = acos(-1.0);
const double eps = 1e-9;
bool eq(double a, double b) { return abs(a - b) <= eps; }
struct pt {
  double x, y;
  pt() {}
  pt(double x_, double y_) : x(x_), y(y_) {}
  bool operator<(const pt p) const {
    if (!eq(x, p.x)) return x < p.x;
    if (!eq(y, p.y)) return y < p.y;
    return 0;
  }
  bool operator==(const pt p) const { return eq(x, p.x) and eq(y, p.y); }
  pt operator+(const pt p) const { return pt(x + p.x, y + p.y); }
  pt operator-(const pt p) const { return pt(x - p.x, y - p.y); }
  pt operator*(const double c) const { return pt(x * c, y * c); }
  pt operator/(const double c) const { return pt(x / c, y / c); }
  double operator*(const pt p) const { return x * p.x + y * p.y; }
  double operator^(const pt p) const { return x * p.y - y * p.x; }
  friend istream& operator>>(istream& in, pt& p) {
    in >> p.x >> p.y;
    return in;
  }
};
struct line {
  pt p, q;
  line() {}
  line(pt p_, pt q_) : p(p_), q(q_) {}
  friend istream& operator>>(istream& in, line& r) {
    in >> r.p >> r.q;
    return in;
  }
};
double sarea2(pt p, pt q, pt r) { return ((q - p) ^ (r - q)); }
int paral(pt u, pt v) {
  if (!eq(u ^ v, 0)) return 0;
  if ((u.x > eps) == (v.x > eps) and (u.y > eps) == (v.y > eps)) return 1;
  return -1;
}
bool ccw(pt p, pt q, pt r) { return sarea2(p, q, r) > 0; }
bool isinseg(pt p, line r) {
  if (p == r.p or p == r.q) return 1;
  return paral(p - r.p, p - r.q) == -1;
}
vector<pt> convex_hull(vector<pt> v) {
  vector<pt> l, u;
  sort(v.begin(), v.end());
  for (int i = 0; i < v.size(); i++) {
    while (l.size() > 1 and !ccw(l[l.size() - 2], l.back(), v[i])) l.pop_back();
    l.push_back(v[i]);
  }
  for (int i = v.size() - 1; i >= 0; i--) {
    while (u.size() > 1 and !ccw(u[u.size() - 2], u.back(), v[i])) u.pop_back();
    u.push_back(v[i]);
  }
  l.pop_back();
  u.pop_back();
  for (pt i : u) l.push_back(i);
  return l;
}
struct convex_pol {
  vector<pt> pol;
  convex_pol(vector<pt> v) : pol(v) {}
  bool is_inside(pt p) {
    if (pol.size() == 1) return p == pol[0];
    if (pol.size() == 2) return isinseg(p, line(pol[0], pol[1]));
    int l = 1, r = pol.size();
    while (l < r) {
      int m = (l + r) / 2;
      if (ccw(p, pol[0], pol[m]))
        l = m + 1;
      else
        r = m;
    }
    if (l == 1) return isinseg(p, line(pol[0], pol[1]));
    if (l == pol.size()) return false;
    return (pol[l - 1] ^ pol[l]) + eps > ((pol[l - 1] - pol[l]) ^ p);
  }
};
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  int n, a, b;
  cin >> n >> a >> b;
  vector<pt> v(n);
  for (pt& p : v) cin >> p;
  double ma_x = 0, ma_y = 0;
  for (pt p : v) ma_x = max(ma_x, p.x), ma_y = max(ma_y, p.y);
  v.push_back(pt(0, 0));
  v.push_back(pt(ma_x, 0));
  v.push_back(pt(0, ma_y));
  v = convex_hull(v);
  double l = 0, r = 1e18;
  for (int x = 0; x < 200; x++) {
    double m = (l + r) / 2;
    convex_pol pol(v);
    for (pt& p : pol.pol) p = p * m;
    if (pol.is_inside(pt(a, b)))
      r = m;
    else
      l = m;
  }
  cout << fixed << setprecision(12) << l << '\n';
  exit(0);
}
