#include <bits/stdc++.h>
using namespace std;
struct point {
  int x, y;
} p[100005];
bool cmpx(const point &a, const point &b) {
  if (a.x != b.x) return a.x < b.x;
  return a.y < b.y;
}
inline long long cross(const point &o, const point &a, const point &b) {
  return (long long)(a.x - o.x) * (b.y - o.y) -
         (long long)(a.y - o.y) * (b.x - o.x);
}
inline long long cross2(const point &a, const point &b) {
  return (long long)a.x * b.y - (long long)b.x * a.y;
}
int n;
int out[100005];
int head = 0;
void convex() {
  for (int i = 1; i <= n; i++) {
    while ((head >= 2 && cross(p[out[head - 1]], p[out[head]], p[i]) >= 0) ||
           (head >= 1 && p[i].y >= p[out[head]].y))
      head--;
    out[++head] = i;
  }
}
long double sqr(long double x) { return x * x; }
int main() {
  scanf("%d%d%d", &n, &p[0].x, &p[0].y);
  for (int i = 1; i <= n; i++) scanf("%d%d", &p[i].x, &p[i].y);
  sort(p + 1, p + n + 1, cmpx);
  convex();
  double ans = max(p[0].x / (double)p[out[1]].x, p[0].y / (double)p[out[1]].y);
  ans = min(ans, max(p[0].x / (double)p[out[head]].x,
                     p[0].y / (double)p[out[head]].y));
  long long t1, t2;
  for (int i = 1; i <= head - 1; i++) {
    point &p1 = p[out[i]];
    point &p2 = p[out[i + 1]];
    if ((t1 = cross2(p1, p[0])) <= 0 && (t2 = cross2(p2, p[0])) >= 0) {
      long double px = -t1 / (long double)(-t1 + t2);
      long double len =
          sqrt(sqr(p1.x + (p2.x - p1.x) * px) + sqr(p1.y + (p2.y - p1.y) * px));
      ans = min(ans, (double)(sqrt(sqr(p[0].x) + sqr(p[0].y)) / len));
      break;
    }
  }
  printf("%.10lf\n", ans);
  return 0;
}
