#include <bits/stdc++.h>
using namespace std;
const int nMAX = 100100;
const double kEPS = 1e-15;
class Vector {
 public:
  double x;
  double y;
  Vector() {}
  Vector(double __x, double __y) : x(__x), y(__y) {}
  inline bool operator<(const Vector &o) const {
    return (x == o.x ? y > o.y : x < o.x);
  }
};
int N;
Vector D;
Vector P[nMAX];
inline int CrossProduct(const Vector &Le, const Vector &Mi, const Vector &Ri) {
  double A = (Mi.x - Le.x) * (Ri.y - Le.y);
  double B = (Mi.y - Le.y) * (Ri.x - Le.x);
  return (fabs(A - B) < kEPS ? 0 : (A - B < (-kEPS) ? -1 : +1));
}
vector<Vector> GetConvexHull() {
  vector<Vector> cHull;
  sort(P + 1, P + N + 1);
  for (int i = 1; i <= N; i++) {
    while (cHull.size() >= 2 &&
           CrossProduct(cHull[cHull.size() - 2], cHull[cHull.size() - 1],
                        P[i]) >= 0) {
      cHull.pop_back();
    }
    cHull.push_back(P[i]);
  }
  return cHull;
}
bool InsidePolygon(const vector<Vector> &cHull, Vector V) {
  for (int i = 0; i < cHull.size() - 1; i++) {
    if (CrossProduct(cHull[i], cHull[i + 1], V) > 0) {
      return false;
    }
  }
  return true;
}
double Search() {
  double Le = 0.0;
  double Ri = 1e7;
  vector<Vector> cHull = GetConvexHull();
  while (fabs(Le - Ri) > kEPS) {
    double Mi = Le * 0.5 + Ri * 0.5;
    if (InsidePolygon(cHull, Vector(D.x * Mi, D.y * Mi)) == true)
      Le = Mi;
    else
      Ri = Mi;
  }
  return 1 / Le;
}
int main() {
  ios_base ::sync_with_stdio(false);
  cin.tie(nullptr);
  cin >> N >> D.x >> D.y;
  double maxX = 0.0;
  double maxY = 0.0;
  for (int i = 1; i <= N; i++) {
    double x, y;
    cin >> x >> y;
    maxX = max(maxX, x);
    maxY = max(maxY, y);
    P[i] = Vector(x, y);
  }
  P[++N] = Vector(maxX, 0);
  P[++N] = Vector(0, maxY);
  cout << setprecision(20) << fixed << Search() << "\n";
  return 0;
}
