#include <bits/stdc++.h>
const double EPS = 1e-9;
const double PI = 3.1415926535897932384626;
const int MAXN = 111111;
int dcmp(const double &x) { return fabs(x) < EPS ? 0 : (x > 0 ? 1 : -1); }
struct Point {
  double x, y;
  Point() {}
  Point(double x, double y) : x(x), y(y) {}
  bool operator<(const Point &p) const {
    return dcmp(x - p.x) < 0 || (dcmp(x - p.x) == 0 && dcmp(y - p.y) < 0);
  }
  Point operator+(const Point &p) const { return Point(x + p.x, y + p.y); }
  Point operator-(const Point &p) const { return Point(x - p.x, y - p.y); }
  Point operator*(const double &p) const { return Point(x * p, y * p); }
} d[MAXN];
int n;
double p, q;
double det(const Point &a, const Point &b) { return a.x * b.y - b.x * a.y; }
double dot(const Point &a, const Point &b) { return a.x * b.x + a.y * b.y; }
bool check(const Point &a, const Point &b, const double &p, const double &q) {
  double xmin = std::min(a.x, b.x), xmax = std::max(a.x, b.x);
  double ymin = std::min(a.y, b.y), ymax = std::max(a.y, b.y);
  if (dcmp(p - xmax) > 0) return false;
  if (dcmp(q - ymax) > 0) return false;
  double k1 = (p - xmin) / (xmax - xmin);
  Point tmp1 = a + (b - a) * k1;
  if (dcmp(tmp1.y - q) >= 0) return true;
  double k2 = (q - ymin) / (ymax - ymin);
  if (a.y > b.y) {
    Point tmp2 = b + (a - b) * k2;
    if (dcmp(tmp2.x - p) >= 0) return true;
  } else {
    Point tmp2 = a + (b - a) * k2;
    if (dcmp(tmp2.x - p) >= 0) return true;
  }
  return false;
}
bool check(const double &answer) {
  int top = 0;
  static Point a[MAXN], z[MAXN];
  for (int i = 1; i <= n; i++) {
    a[i] = d[i] * answer;
  }
  std::sort(a + 1, a + n + 1);
  for (int i = 1; i <= n; i++) {
    while (top >= 2 && dcmp(det(a[i] - z[top - 1], z[top] - z[top - 1])) <= 0)
      top--;
    z[++top] = a[i];
  }
  for (int i = 1; i < top; i++)
    if (check(z[i], z[i + 1], p, q)) return true;
  if (check(Point(0, 0), z[1], p, q)) return true;
  if (check(Point(0, 0), z[top], p, q)) return true;
  return false;
}
int main() {
  std::cin >> n >> p >> q;
  for (int i = 1; i <= n; i++) {
    std::cin >> d[i].x >> d[i].y;
  }
  double left = 0, right = std::max(p, q);
  for (int c = 1; c <= 60; c++) {
    double middle = (left + right) / 2.0;
    if (check(middle))
      right = middle;
    else
      left = middle;
  }
  printf("%.10f\n", left);
  return 0;
}
