#include <bits/stdc++.h>
using namespace std;
complex<double> r() {
  double a, b;
  cin >> a >> b;
  return {a, b};
}
double cross(complex<double> a, complex<double> b) {
  return (conj(a) * b).imag();
}
double orient(complex<double> a, complex<double> b, complex<double> c) {
  return cross(b - a, c - a);
}
void up(vector<complex<double> > &st, complex<double> p) {
  while ((long long)(st).size() >= 2 && orient(st.end()[-2], st.back(), p) >= 0)
    st.pop_back();
  st.push_back(p);
}
struct line {
  complex<double> d;
  double c;
  line(complex<double> a, complex<double> b) : d(b - a), c(cross(d, a)) {}
};
complex<double> inter(line l1, line l2) {
  return (l1.c * l2.d - l2.c * l1.d) / cross(l1.d, l2.d);
}
signed main() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  long long n;
  complex<double> obj;
  cin >> n;
  obj = r();
  vector<complex<double> > ps(n);
  double mx = 0, my = 0;
  for (long long i = 0; i < (n); i++) {
    ps[i] = r();
    mx = max(mx, (ps[i].real()));
    my = max(my, (ps[i].imag()));
  }
  ps.push_back({0.0, my});
  sort(ps.begin(), ps.end(), [](complex<double> a, complex<double> b) {
    return make_tuple(a.real(), -a.imag()) < make_tuple(b.real(), -b.imag());
  });
  vector<complex<double> > hull;
  for (complex<double> p : ps) up(hull, p);
  hull.push_back({mx, 0.0});
  long long i = upper_bound(hull.begin(), hull.end(), obj,
                            [](complex<double> a, complex<double> b) {
                              return cross(a, b) < 0;
                            }) -
                hull.begin() - 1;
  complex<double> a = inter(line(0, obj), line(hull[i], hull[i + 1]));
  cout << fixed << setprecision(8) << obj.real() / a.real() << "\n";
}
