#include <bits/stdc++.h>
using namespace std;
template <class T>
bool uin(T &a, T b) {
  return a > b ? (a = b, true) : false;
}
template <class T>
bool uax(T &a, T b) {
  return a < b ? (a = b, true) : false;
}
struct TPoint {
  long long x, y;
  TPoint(long long x = 0, long long y = 0) : x(x), y(y) {}
  TPoint operator-(const TPoint &p) const { return TPoint(x - p.x, y - p.y); }
  long long operator%(const TPoint &p) const { return x * p.y - y * p.x; }
  bool operator<(const TPoint &p) const {
    return make_pair(x, y) < make_pair(p.x, p.y);
  }
};
int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.precision(10);
  cout << fixed;
  int n;
  long long x, y;
  cin >> n >> x >> y;
  vector<TPoint> p(n);
  for (int i = 0; i < (int)(n); ++i) cin >> p[i].x >> p[i].y;
  sort((p).begin(), (p).end());
  vector<TPoint> st;
  for (int i = 0; i < (int)(n); ++i) {
    while (st.size() > 1) {
      TPoint prv = st.back(), pprv = st[st.size() - 2];
      if ((p[i] - pprv) % (prv - pprv) <= 0)
        st.pop_back();
      else
        break;
    }
    while (!st.empty() && st.back() % p[i] == 0) st.pop_back();
    st.push_back(p[i]);
  }
  double ans = 1e9;
  TPoint Q = TPoint(x, y);
  for (int i = 0; i < (int)(st.size()); ++i) {
    uin(ans, max(1.0 * Q.x / st[i].x, 1.0 * y / st[i].y));
    if (i + 1 < st.size()) {
      if ((Q % st[i]) >= 0 && (st[i + 1] % Q) >= 0) {
        uin(ans,
            1.0 / ((st[i + 1] - st[i]) % st[i]) * ((st[i + 1] - st[i]) % Q));
      }
    }
  }
  cout << ans << '\n';
  return 0;
}
