#include <bits/stdc++.h>
using namespace std;
int N, P, Q;
pair<int, int> work[100002];
void Input() {
  scanf("%d %d %d", &N, &P, &Q);
  for (int i = 1; i <= N; i++) {
    scanf("%d %d", &work[i].first, &work[i].second);
  }
}
pair<int, int> torem;
long long CrossProduct(pair<int, int> a, pair<int, int> b,
                       pair<int, int> origin) {
  a.first -= origin.first;
  a.second -= origin.second;
  b.first -= origin.first;
  b.second -= origin.second;
  return ((long long)a.first * (long long)b.second -
          (long long)a.second * (long long)b.first);
}
long double GetDist(pair<int, int> a, pair<int, int> b) {
  return sqrt((a.first - b.first) * (a.first - b.first) +
              (a.second - b.second) * (a.second - b.second));
}
bool SH(pair<int, int> a, pair<int, int> b) {
  long long cp = CrossProduct(a, b, torem);
  return (cp != 0 ? (cp > 0) : (GetDist(a, torem) < GetDist(b, torem)));
}
pair<int, int> stk[100002];
int ssz;
const long double eps = 0.00000000001;
const long double PI = 4.0 * atan(1.0);
bool Equal(long double a, long double b) {
  long double rs = a - b;
  if (rs < 0) rs = -rs;
  return (rs < eps);
}
pair<long double, long double> RotateOn(long double rad,
                                        pair<long double, long double> p) {
  long double x = cos(rad) * p.first - sin(rad) * p.second;
  long double y = sin(rad) * p.first + cos(rad) * p.second;
  return make_pair(x, y);
}
long double Eval(pair<int, int> pa, pair<int, int> pb) {
  pair<long double, long double> zero = make_pair(0.0, 0.0);
  pair<long double, long double> tar =
      make_pair((long double)P, (long double)Q);
  pair<long double, long double> p1 =
      make_pair((long double)pa.first, (long double)pa.second);
  pair<long double, long double> p2 =
      make_pair((long double)pb.first, (long double)pb.second);
  int toberot = 0;
  double rad = PI / 10.0;
  while (Equal(zero.first, tar.first) || Equal(p1.first, p2.first)) {
    toberot++;
    zero = RotateOn(rad, zero);
    tar = RotateOn(rad, tar);
    p1 = RotateOn(rad, p1);
    p2 = RotateOn(rad, p2);
  }
  long double a1, b1, a2, b2;
  a1 = (tar.second - zero.second) / (tar.first - zero.first);
  b1 = tar.second - a1 * tar.first;
  a2 = (p2.second - p1.second) / (p2.first - p1.first);
  b2 = p2.second - a2 * p2.first;
  if (Equal(a1, a2)) {
    return -1.0;
  }
  long double x = (b1 - b2) / (a2 - a1);
  long double xfrom, xto;
  xfrom = min(p1.first, p2.first);
  xto = max(p1.first, p2.first);
  if (x < xfrom || x > xto) return -1.0;
  long double y = a2 * x + b2;
  if (toberot) {
    pair<long double, long double> temp =
        RotateOn(-rad * toberot, make_pair(x, y));
    x = temp.first;
    y = temp.second;
  }
  long double take1, take2;
  take1 = (long double)P / x;
  take2 = (long double)Q / y;
  return max(take1, take2);
}
int main() {
  Input();
  long double ans = 1000000.0;
  for (int i = 1; i <= N; i++) {
    long double cur;
    cur = max((long double)P / (long double)work[i].first,
              (long double)Q / (long double)work[i].second);
    ans = min(ans, cur);
  }
  torem = work[1];
  for (int i = 1; i <= N; i++) {
    torem = (torem.second != work[i].second)
                ? (torem.second < work[i].second ? torem : work[i])
                : (torem.first < work[i].first ? torem : work[i]);
  }
  sort(work + 1, work + N + 1, SH);
  for (int i = 1; i <= N; i++) {
    while (ssz > 1 && CrossProduct(stk[ssz], work[i], stk[ssz - 1]) < 0) {
      ssz--;
    }
    while (ssz > 0 && stk[ssz] == work[i]) {
      ssz--;
    }
    stk[++ssz] = work[i];
  }
  if (ssz > 1)
    for (int i = 1; i <= ssz; i++) {
      int i1 = i, i2 = (i) % ssz + 1;
      long double cur = Eval(stk[i1], stk[i2]);
      if (Equal(cur, -1.0)) continue;
      ans = min(ans, cur);
    }
  printf("%.10f\n", (double)ans);
}
