#include <bits/stdc++.h>
using namespace std;
const signed long long INF = 1000000100;
const long double EPS = 1e-9;
const long double Pi = 2 * atanl(1.0);
template <typename T, typename U>
ostream &operator<<(ostream &os, const pair<T, U> &p) {
  return os << "(" << p.first << "," << p.second << ")";
}
template <typename T>
ostream &operator<<(ostream &os, const vector<T> &V) {
  os << "[";
  for (int(i) = (0); (i) < (int(V.size())); (i)++)
    os << V[i] << ((i == int(V.size()) - 1) ? "" : ",");
  return os << "]";
}
template <typename T>
ostream &operator<<(ostream &os, const set<T> &S) {
  os << "(";
  for (T i : S) os << i << (i == *S.rbegin() ? "" : ",");
  return os << ")";
}
template <typename T, typename U>
ostream &operator<<(ostream &os, const map<T, U> &M) {
  os << "{";
  for (pair<T, U> i : M) os << i << (i.X == M.rbegin()->X ? "" : ",");
  return os << "}";
}
inline bool is_zero(const long double &first) {
  return first >= -EPS and first <= EPS;
}
inline int sign(const long double &first) {
  if (first < -EPS)
    return -1;
  else if (first > EPS)
    return 1;
  else
    return 0;
}
inline pair<long double, long double> operator+(
    const pair<long double, long double> &a,
    const pair<long double, long double> &b) {
  return pair<long double, long double>(a.first + b.first, a.second + b.second);
}
inline pair<long double, long double> operator-(
    const pair<long double, long double> &a,
    const pair<long double, long double> &b) {
  return pair<long double, long double>(a.first - b.first, a.second - b.second);
}
inline pair<long double, long double> operator*(
    const pair<long double, long double> &a, long double t) {
  return pair<long double, long double>(a.first * t, a.second * t);
}
inline pair<long double, long double> operator/(
    const pair<long double, long double> &a, long double t) {
  return pair<long double, long double>(a.first / t, a.second / t);
}
inline bool operator==(const pair<long double, long double> &a,
                       const pair<long double, long double> &b) {
  return is_zero(a.first - b.first) and is_zero(a.second - b.second);
}
inline bool operator!=(const pair<long double, long double> &a,
                       const pair<long double, long double> &b) {
  return !is_zero(a.first - b.first) or !is_zero(a.second - b.second);
}
pair<long double, long double> FAIL = make_pair(1e30, 1e30);
inline long double cp(const pair<long double, long double> &a,
                      const pair<long double, long double> &b) {
  return a.first * b.second - a.second * b.first;
}
inline long double dp(const pair<long double, long double> &a,
                      const pair<long double, long double> &b) {
  return a.first * b.first + a.second * b.second;
}
inline long double pieprzu(const pair<long double, long double> &a,
                           const pair<long double, long double> &b) {
  return sqrtl((b.first - a.first) * (b.first - a.first) +
               (b.second - a.second) * (b.second - a.second));
}
inline long double distance_point_line(
    const pair<long double, long double> &p,
    const pair<pair<long double, long double>, pair<long double, long double> >
        &u) {
  return cp(p - u.first, p - u.second) / pieprzu(u.first, u.second);
}
inline bool on_right(const pair<long double, long double> &a,
                     const pair<long double, long double> &b,
                     const pair<long double, long double> &c) {
  return sign(cp(c - a, b - a)) == 1;
}
inline bool on_left(const pair<long double, long double> &a,
                    const pair<long double, long double> &b,
                    const pair<long double, long double> &c) {
  return sign(cp(c - a, b - a)) == -1;
}
inline double polygon_area(const vector<pair<long double, long double> > &A) {
  long double result = 0.0;
  if (int(A.size()) <= 2) return 0;
  for (int(i) = (2); (i) < (int(A.size())); (i)++)
    result += cp(A[i] - A[0], A[i - 1] - A[0]);
  return abs(result / 2);
}
inline pair<long double, long double> projection(
    const pair<long double, long double> &p,
    const pair<pair<long double, long double>, pair<long double, long double> >
        &u) {
  return u.first +
         ((u.second - u.first) * (dp(p - u.first, u.second - u.first) /
                                  dp(u.second - u.first, u.second - u.first)));
}
inline bool between(const pair<long double, long double> &a,
                    const pair<long double, long double> &b,
                    const pair<long double, long double> &c) {
  return sign(min(b.first, c.first) - a.first) <= 0 and
         sign(a.first - max(b.first, c.first)) <= 0 and
         sign(min(b.second, c.second) - a.second) <= 0 and
         sign(a.second - max(b.second, c.second)) <= 0;
}
inline bool on_segment(const pair<long double, long double> &p,
                       const pair<pair<long double, long double>,
                                  pair<long double, long double> > &u) {
  return between(p, u.first, u.second) and pieprzu(p, projection(p, u)) < EPS;
}
inline long double distance_segment_point(
    const pair<pair<long double, long double>, pair<long double, long double> >
        &u,
    const pair<long double, long double> &p) {
  if (on_segment(projection(p, u), u))
    return fabs(distance_point_line(p, u));
  else
    return min(pieprzu(u.first, p), pieprzu(u.second, p));
}
inline long double angle(const pair<long double, long double> &a,
                         const pair<long double, long double> &o,
                         const pair<long double, long double> &b) {
  long double result = atan2l(a.first - o.first, a.second - o.second) -
                       atan2l(b.first - o.first, b.second - o.second);
  if (sign(result) == -1) result += 2 * Pi;
  return result;
}
inline pair<long double, long double> point_reflection(
    const pair<long double, long double> &s,
    const pair<long double, long double> &p) {
  return p + (s - p) * 2;
}
inline pair<long double, long double> axial_reflection(
    const pair<long double, long double> &p,
    const pair<pair<long double, long double>, pair<long double, long double> >
        &u) {
  return point_reflection(p, projection(p, u));
}
inline int triangle_inequality(long double &p, long double q, long double r) {
  int a = sign(p + q - r);
  int b = sign(p + r - q);
  int c = sign(q + r - p);
  if (a == -1 or b == -1 or c == -1) return -1;
  if (a == 0 or b == 0 or c == 0) return 0;
  return 1;
}
vector<pair<long double, long double> > convex_hull(
    vector<pair<long double, long double> > A) {
  if (int(A.size()) <= 1) return A;
  sort(A.begin(), A.end());
  vector<pair<long double, long double> > R{A[0], A[1]};
  for (int(i) = (2); (i) < (int(A.size())); (i)++) {
    while (int(R.size()) >= 2 and
           !on_right(R[R.size() - 2], R[R.size() - 1], A[i]))
      R.pop_back();
    R.push_back(A[i]);
  }
  int u = int(A.size());
  for (int(i) = (int(A.size()) - 2); (i) >= (0); (i)--) {
    while (int(R.size()) > u and
           !on_right(R[R.size() - 2], R[R.size() - 1], A[i]))
      R.pop_back();
    R.push_back(A[i]);
  }
  R.pop_back();
  return move(R);
}
inline pair<long double, long double> rotate90_origin(
    const pair<long double, long double> &p) {
  return pair<long double, long double>(p.second, -p.first);
}
inline pair<long double, long double> rotate90(
    const pair<long double, long double> &p,
    const pair<long double, long double> &o) {
  return o + rotate90_origin(p - o);
}
inline pair<long double, long double> rotate_origin(
    const pair<long double, long double> &p, long double theta) {
  theta = -theta;
  long double s = sinl(theta);
  long double c = cosl(theta);
  return pair<long double, long double>(p.first * c - p.second * s,
                                        p.first * s + p.second * c);
}
inline pair<long double, long double> rotate(
    const pair<long double, long double> &p,
    const pair<long double, long double> &o, long double theta) {
  return o + rotate_origin(p - o, theta);
}
inline bool parallel(const pair<pair<long double, long double>,
                                pair<long double, long double> > &u,
                     const pair<pair<long double, long double>,
                                pair<long double, long double> > &v) {
  return is_zero(cp(u.second - u.first, v.second - v.first));
}
bool perpendicular(const pair<pair<long double, long double>,
                              pair<long double, long double> > &u,
                   const pair<pair<long double, long double>,
                              pair<long double, long double> > &v) {
  return is_zero(dp(u.second - u.first, v.second - v.first));
}
inline pair<pair<long double, long double>, pair<long double, long double> >
segment_bisector(const pair<pair<long double, long double>,
                            pair<long double, long double> > &u) {
  pair<long double, long double> p = (u.first + u.second) / 2;
  return pair<pair<long double, long double>, pair<long double, long double> >(
      p, rotate90(u.second, p));
}
inline pair<pair<long double, long double>, pair<long double, long double> >
angle_bisector(const pair<long double, long double> &a,
               const pair<long double, long double> &o,
               const pair<long double, long double> &b) {
  return pair<pair<long double, long double>, pair<long double, long double> >(
      o, rotate(b, o, angle(a, o, b) / 2));
}
inline pair<long double, long double> intersection_line_line(
    const pair<pair<long double, long double>, pair<long double, long double> >
        &u,
    const pair<pair<long double, long double>, pair<long double, long double> >
        &v) {
  long double p = cp(u.second - v.first, u.second - u.first);
  long double q = cp(v.second - v.first, u.second - u.first);
  if (is_zero(q)) return FAIL;
  return v.first + (v.second - v.first) * (p / q);
}
const pair<pair<long double, long double>, long double> CFAIL =
    pair<pair<long double, long double>, long double>(FAIL, 0);
pair<pair<long double, long double>, long double> incircle(
    const pair<long double, long double> &a,
    const pair<long double, long double> &b,
    const pair<long double, long double> &c) {
  if (is_zero(cp(b - a, c - a))) return CFAIL;
  pair<pair<long double, long double>, pair<long double, long double> > p =
      segment_bisector(
          pair<pair<long double, long double>, pair<long double, long double> >(
              a, b));
  pair<pair<long double, long double>, pair<long double, long double> > q =
      segment_bisector(
          pair<pair<long double, long double>, pair<long double, long double> >(
              a, c));
  pair<long double, long double> t = intersection_line_line(p, q);
  return pair<pair<long double, long double>, long double>(t, pieprzu(t, a));
}
pair<long double, long double> intersection_segment_segment(
    const pair<pair<long double, long double>, pair<long double, long double> >
        &u,
    const pair<pair<long double, long double>, pair<long double, long double> >
        &v) {
  pair<long double, long double> r = intersection_line_line(u, v);
  if (on_segment(r, u) and on_segment(r, v))
    return r;
  else
    return FAIL;
}
int main() {
  int N, X, Y;
  scanf("%d %d %d", &N, &X, &Y);
  vector<pair<long double, long double> > P;
  int max_a = 0;
  int max_b = 0;
  for (int(i) = (1); (i) <= (N); (i)++) {
    int a, b;
    scanf("%d %d", &a, &b);
    max_a = max(max_a, a);
    max_b = max(max_b, b);
    P.emplace_back(a, b);
  }
  P.emplace_back(max_a, 0);
  P.emplace_back(0, max_b);
  P = convex_hull(P);
  pair<long double, long double> n(X, Y);
  pair<long double, long double> z;
  for (int(i) = (1); (i) <= (1500000); (i)++) {
    if (X * i > 1490490 or Y * i > 1490010) {
      z = pair<long double, long double>(X * i, Y * i);
      break;
    }
  }
  pair<pair<long double, long double>, pair<long double, long double> > s(
      pair<long double, long double>(0, 0), z);
  long double result = INF;
  for (int(i) = (0); (i) < (int(P.size())); (i)++) {
    pair<long double, long double> a = P[i];
    pair<long double, long double> b = P[(i + 1) % int(P.size())];
    pair<pair<long double, long double>, pair<long double, long double> > t(a,
                                                                            b);
    pair<long double, long double> d = intersection_segment_segment(s, t);
    if (d == FAIL) continue;
    result = min(result, pieprzu(pair<long double, long double>(X, Y),
                                 pair<long double, long double>(0, 0)) /
                             pieprzu(d, pair<long double, long double>(0, 0)));
  }
  cout << fixed << result << endl;
  return 0;
}
