#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-12, pi = 3.14159265358979323846264;
const int maxn = 100086;
double answer = 1e10;
int n, len;
int sign(double u) {
  if (fabs(u) < eps) return 0;
  if (u > 0) return 1;
  return -1;
}
struct Point {
  double x, y;
  Point(double x1 = 0, double y1 = 0) {
    x = x1;
    y = y1;
  }
  friend Point operator+(Point a, Point b) {
    return Point(a.x + b.x, a.y + b.y);
  }
  friend Point operator-(Point a, Point b) {
    return Point(a.x - b.x, a.y - b.y);
  }
  friend Point operator*(Point a, double b) { return Point(a.x * b, a.y * b); }
  friend Point operator/(Point a, double b) { return Point(a.x / b, a.y / b); }
  friend bool operator==(Point a, Point b) {
    if (sign(a.x - b.x) != 0) return 0;
    if (sign(a.y - b.y) != 0) return 0;
    return 1;
  }
  double length() { return sqrt(x * x + y * y); }
} p[maxn], ans[maxn], P, now;
double det(Point a, Point b) { return a.x * b.y - a.y * b.x; }
double dot(Point a, Point b) { return a.x * b.x + a.y * b.y; }
double dist(Point a, Point b) {
  Point c = a - b;
  return c.length();
}
bool cmp(Point a, Point b) {
  if (sign(a.x - b.x) == 0) return (sign(a.y - b.y) < 0);
  return (sign(a.x - b.x) < 0);
}
void get_polygon() {
  int tmp = 0, temp;
  sort(p + 1, p + 1 + n, cmp);
  for (int i = 1; i <= n; i++) {
    while ((tmp >= 2) &&
           (sign(det(ans[tmp] - ans[tmp - 1], p[i] - ans[tmp - 1])) <= 0))
      tmp--;
    ans[++tmp] = p[i];
  }
  temp = tmp;
  for (int i = n - 1; i >= 1; i--) {
    while ((tmp > temp) &&
           (sign(det(ans[tmp] - ans[tmp - 1], p[i] - ans[tmp - 1])) <= 0))
      tmp--;
    ans[++tmp] = p[i];
  }
  len = tmp - 1;
}
Point get_Cross(Point a, Point b, Point c, Point d) {
  Point t1 = b - a, t2 = d - c;
  return c + d * det(c - a, t1) / det(t2, t1);
}
int main() {
  double xmax = -1, ymax = -1;
  scanf("%d %lf %lf", &n, &P.x, &P.y);
  for (int i = 1; i <= n; i++) {
    scanf("%lf %lf", &p[i].x, &p[i].y);
    xmax = max(xmax, p[i].x);
    ymax = max(ymax, p[i].y);
  }
  p[++n] = Point(0, ymax);
  p[++n] = Point(xmax, 0);
  get_polygon();
  ans[len + 1] = ans[1];
  for (int i = 1; i <= len; i++)
    if (sign(det(ans[i], P)) >= 0 && sign(det(P, ans[i + 1])) >= 0) {
      now = get_Cross(ans[i], ans[i + 1], Point(0, 0), P);
      printf("%.8lf\n", P.length() / now.length());
      return 0;
    }
  return 0;
}
