#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-8;
int cmp(double x) {
  if (fabs(x) < eps) return 0;
  if (x > 0) return 1;
  return -1;
}
struct point {
  double x, y;
  point() {}
  point(double a, double b) : x(a), y(b) {}
  friend point operator-(const point &a, const point &b) {
    return point(a.x - b.x, a.y - b.y);
  }
  friend point operator*(const double &a, const point &b) {
    return point(a * b.x, a * b.y);
  }
  friend point operator/(const point &a, const double b) {
    return point(a.x / b, a.y / b);
  }
  friend bool operator==(const point &a, const point &b) {
    return cmp(a.x - b.x) == 0 && cmp(a.y - b.y) == 0;
  }
};
struct polygon_convex {
  vector<point> P;
  polygon_convex(int Size = 0) { P.resize(Size); }
};
double det(const point &a, const point &b) { return a.x * b.y - b.x * a.y; }
bool comp_less(const point &a, const point &b) {
  return cmp(a.x - b.x) < 0 || cmp(a.x - b.x) == 0 && cmp(a.y - b.y) < 0;
}
polygon_convex polygon_hull(vector<point> a) {
  polygon_convex res(2 * a.size() + 5);
  sort(a.begin(), a.end(), comp_less);
  a.erase(unique(a.begin(), a.end()), a.end());
  int m = 0;
  for (int i = 0; i < a.size(); ++i) {
    while (m > 1 &&
           cmp(det(res.P[m - 1] - res.P[m - 2], a[i] - res.P[m - 2])) <= 0)
      --m;
    res.P[m++] = a[i];
  }
  int k = m;
  for (int i = a.size() - 2; i >= 0; --i) {
    while (m > k &&
           cmp(det(res.P[m - 1] - res.P[m - 2], a[i] - res.P[m - 2])) <= 0)
      --m;
    res.P[m++] = a[i];
  }
  if (a.size() > 1) --m;
  res.P.resize(m);
  return res;
}
struct line {
  point a, b;
  line() {}
  line(point x, point y) : a(x), b(y) {}
};
line point_make_line(const point a, const point b) { return line(a, b); }
bool parallel(line a, line b) { return !cmp(det(a.b - a.a, b.b - b.a)); }
bool line_make_point(line a, line b, point &res) {
  if (parallel(a, b)) return false;
  double s1 = det(a.a - b.a, b.b - b.a);
  double s2 = det(a.b - b.a, b.b - b.a);
  double s3 = det(b.a - a.a, a.b - a.a);
  double s4 = det(b.b - a.a, a.b - a.a);
  if (s1 * s2 > 0 || s3 * s4 > 0) return false;
  res = (s1 * a.b - s2 * a.a) / (s1 - s2);
  return true;
}
int n, p, q;
vector<point> a;
line target;
void read_data() {
  scanf("%d %d %d", &n, &p, &q);
  a.resize(n * 3);
  for (int i = 0; i < n; ++i) {
    int t = i * 3;
    scanf("%lf %lf", &a[t].x, &a[t].y);
    a[t + 1].x = a[t].x;
    a[t + 1].y = 0;
    a[t + 2].x = 0;
    a[t + 2].y = a[t].y;
  }
  target = point_make_line(point(0, 0),
                           point((double)p * 1000000, (double)q * 1000000));
}
void deal() {
  int n;
  point x(0, 0);
  point tempp(0, 0);
  polygon_convex hull = polygon_hull(a);
  n = hull.P.size();
  for (int i = 0; i < n; ++i) {
    line templ = point_make_line(hull.P[i], hull.P[(i - 1 + n) % n]);
    if (line_make_point(target, templ, tempp)) {
      if (tempp.x > x.x && tempp.y > x.y) x = tempp;
    }
  }
  printf("%.8f\n", p / x.x);
}
int main() {
  read_data();
  deal();
  return 0;
}
