#include <bits/stdc++.h>
using namespace std;
inline long long read() {
  long long x = 0;
  char ch = getchar();
  bool positive = 1;
  for (; !isdigit(ch); ch = getchar())
    if (ch == '-') positive = 0;
  for (; isdigit(ch); ch = getchar()) x = x * 10 + ch - '0';
  return positive ? x : -x;
}
inline void write(long long a) {
  if (a >= 10) write(a / 10);
  putchar('0' + a % 10);
}
inline void writeln(long long a) {
  if (a < 0) {
    a = -a;
    putchar('-');
  }
  write(a);
  puts("");
}
const long long N = 100005;
long long p, q, n;
double ans;
pair<long long, long long> a[N], que[N];
inline double suan(pair<long long, long long> a, pair<long long, long long> b) {
  if (a.first * q >= a.second * p && b.first * q >= b.second * p) {
    return (double)q / max(a.second, b.second);
  } else if (a.first * q <= a.second * p && b.first * q <= b.second * p) {
    return (double)p / max(a.first, b.first);
  }
  double bb = ((double)p * a.second / a.first - q) /
              ((double)b.first * a.second / a.first - b.second);
  double aa = (p - bb * b.first) / a.first;
  return aa + bb;
}
int main() {
  n = read();
  p = read();
  q = read();
  for (long long i = 1; i <= n; i++) {
    long long s1 = read(), s2 = read();
    a[i] = make_pair(s1, s2);
  }
  sort(&a[1], &a[n + 1]);
  long long j = 0;
  for (long long i = 1; i <= n; i++) {
    while (j && que[j].second <= a[i].second) j--;
    que[++j] = a[i];
  }
  n = j;
  j = n;
  a[1] = que[1];
  a[1].first = 0;
  a[n + 2] = que[n];
  a[n + 2].second = 0;
  for (long long i = 1; i <= n; i++) a[i + 1] = que[i];
  n += 2;
  ans = suan(a[1], a[1]);
  for (int i = 2; i <= n; i++) ans = min(ans, suan(a[i], a[i]));
  for (int i = 1; i < n; i++) ans = min(ans, suan(a[i], a[i + 1]));
  for (long long i = 1; i <= n; i++) {
    while (j > 1 && suan(a[i], a[j - 1]) < suan(a[i], a[j])) j--;
    ans = min(ans, min(suan(a[i], a[j]),
                       min(suan(a[i], a[j - 1]), suan(a[i], a[j + 1]))));
  }
  printf("%.8lf\n", ans);
}
