#include <bits/stdc++.h>
using namespace std;
struct Po {
  long long x, y;
  Po() { x = y = 0; }
  Po(long long _x, long long _y) : x(_x), y(_y) {}
  bool operator<(const Po &b) const {
    if (x != b.x) return x > b.x;
    return y > b.y;
  }
  Po operator-(const Po &b) const { return Po(x - b.x, y - b.y); }
  pair<long double, long double> getL(const Po &b) const {
    long double k = (long double)(b.y - y) / (b.x - x);
    return pair<long double, long double>(k, y - k * x);
  }
} p[101000];
long long det(long long x0, long long y0, long long x1, long long y1) {
  return x0 * y1 - x1 * y0;
}
long long det(Po a, Po b) { return det(a.x, a.y, b.x, b.y); }
Po T;
int n, top;
long double ans;
int stk[101000];
int sgn(long long x) { return x > 0 ? 1 : x < 0 ? -1 : 0; }
int main() {
  scanf("%d%d%d", &n, &T.x, &T.y);
  ans = (1 << 30);
  for (int i = 1; i <= n; ++i) {
    scanf("%I64d%I64d", &p[i].x, &p[i].y);
    ans = min(ans, (long double)max(1.0 * T.x / p[i].x, 1.0 * T.y / p[i].y));
  }
  sort(p + 1, p + n + 1);
  stk[top = 1] = 1;
  for (int i = 2; i <= n; ++i) {
    if (p[i].y <= p[stk[top]].y) continue;
    while (top > 1 && det(p[stk[top - 1]] - p[i], p[stk[top]] - p[i]) <= 0)
      --top;
    stk[++top] = i;
  }
  for (int i = 1; i <= top - 1; ++i) {
    if (sgn(det(p[stk[i]], T)) != sgn(det(p[stk[i + 1]], T))) {
      pair<long double, long double> tmp = p[stk[i]].getL(p[stk[i + 1]]);
      long double x = tmp.second / (1.0 * T.y / T.x - tmp.first);
      ans = min(ans, T.x / x);
    }
  }
  printf("%.10f\n", (double)ans);
  return 0;
}
