#include <bits/stdc++.h>
using namespace std;
struct pt {
  long long int x, y;
};
istream &operator>>(istream &input_stream, pt &a) {
  input_stream >> a.x >> a.y;
  return input_stream;
}
ostream &operator<<(ostream &output_stream, pt a) {
  output_stream << a.x << " " << a.y;
  return output_stream;
}
long long int crossprod(pt a, pt b) { return a.x * b.y - a.y * b.x; }
long long int dotprod(pt a, pt b) { return a.x * b.x + a.y * b.y; }
pt norm(pt b, pt a) {
  a.x -= b.x;
  a.y -= b.y;
  return a;
}
long long int dist(pt a) { return (a.x) * (a.x) + (a.y) * (a.y); }
vector<pt> points;
long long int crossprod2(pt a, pt b, pt c) {
  return (b.x - a.x) * (c.y - b.y) - (b.y - a.y) * (c.x - b.x);
}
bool cmp(pt a, pt b) {
  a = norm(points[0], a);
  b = norm(points[0], b);
  return (crossprod(a, b) > 0) || (crossprod(a, b) == 0 && dist(a) < dist(b));
}
struct line {
  long double a, b, c;
};
line build(pt b, pt c) {
  line d;
  d.a = b.y - c.y;
  d.b = c.x - b.x;
  d.c = -(d.a * b.x + d.b * b.y);
  return d;
}
struct ptl {
  long double x, y;
};
ptl norml(ptl c, ptl b) {
  b.x -= c.x;
  b.y -= c.y;
  return b;
}
long double dotprodl(ptl c, ptl b) { return c.x * b.x + c.y * b.y; }
long double crossprodl(ptl c, ptl b) { return b.x * c.y - b.y * c.x; }
long double dist(ptl b) { return b.x * b.x + b.y * b.y; }
long double det(long double a, long double b, long double c, long double d) {
  return a * d - b * c;
}
ptl interpoint(line m, line n) {
  long double zn = det(m.a, m.b, n.a, n.b);
  ptl res;
  res.x = -det(m.c, m.b, n.c, n.b) / zn;
  res.y = -det(m.a, m.c, n.a, n.c) / zn;
  return res;
}
ptl interseqt(pt a, pt b, pt c, pt d) {
  ptl res;
  res.x = 0;
  res.y = 0;
  if (crossprod(norm(a, b), norm(c, d)) == 0) {
    return res;
  }
  line m = build(a, b);
  line n = build(c, d);
  ptl e = interpoint(m, n);
  ptl cc;
  cc.x = c.x;
  cc.y = c.y;
  ptl dd;
  dd.x = d.x;
  dd.y = d.y;
  ptl bb;
  bb.x = b.x;
  bb.y = b.y;
  ptl aa;
  aa.x = a.x;
  aa.y = a.y;
  if (dotprodl(norml(aa, e), norml(aa, bb)) >= 0 &&
      dotprodl(norml(bb, e), norml(bb, aa)) >= 0)
    if (dotprodl(norml(cc, e), norml(cc, dd)) >= 0) return e;
  return res;
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int n;
  pt need;
  cin >> n >> need.x >> need.y;
  points.resize(n);
  for (int i = 0; i < n; ++i) cin >> points[i];
  long long int mx = points[0].x, my = points[0].y;
  long long int min_x = points[0].x;
  long long int min_y = points[0].y;
  for (int i = 0; i < n; ++i) {
    mx = max(mx, points[i].x);
    my = max(my, points[i].y);
  }
  pt c;
  c.x = 0;
  c.y = my;
  points.push_back(c);
  c.y = 0;
  c.x = mx;
  points.push_back(c);
  n = ((long long int)(points).size());
  for (int i = 1; i < n; i++) {
    if (points[i].x < min_x) {
      min_x = points[i].x;
      min_y = points[i].y;
      swap(points[i], points[0]);
    } else if (points[i].x == min_x && points[i].y < min_y) {
      min_y = points[i].y;
      swap(points[i], points[0]);
    }
  }
  sort(points.begin() + 1, points.end(), cmp);
  vector<pt> ans;
  ans.push_back(points[0]);
  ans.push_back(points[1]);
  for (int i = 2; i < n; i++) {
    while (((long long int)(ans).size()) > 1 &&
           crossprod2(ans[((long long int)(ans).size()) - 2],
                      ans[((long long int)(ans).size()) - 1], points[i]) <= 0)
      ans.pop_back();
    ans.push_back(points[i]);
  }
  ans.push_back(points[0]);
  pt nul;
  nul.x = 0;
  nul.y = 0;
  line ch = build(nul, need);
  long double res = 1e18;
  for (int i = 0; i < ((long long int)(ans).size()) - 1; ++i) {
    ptl seqt = interseqt(ans[i], ans[i + 1], nul, need);
    if (seqt.x == 0 || seqt.y == 0) continue;
    res = min(res, max(need.x / seqt.x, need.y / seqt.y));
  }
  cout << setprecision(20) << res;
  return 0;
}
