#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
struct Point {
  int x, y;
  Point() {}
  Point(int _x, int _y) {
    x = _x;
    y = _y;
  }
  void input() { scanf("%d%d", &x, &y); }
  int operator<(const Point &a) const {
    return make_pair(x, y) < make_pair(a.x, a.y);
  }
  long long operator*(const Point &a) const {
    return (long long)x * a.y - (long long)y * a.x;
  }
  Point operator-(const Point &a) const { return (Point){x - a.x, y - a.y}; }
} P[N];
int sta[N];
int main() {
  int n, m, r;
  scanf("%d%d%d", &n, &m, &r);
  for (int i = 1; i <= n; ++i) {
    P[i].input();
  }
  sort(P + 1, P + 1 + n);
  int p = 0;
  for (int i = 1; i <= n; ++i) {
    while (p > 1 && (P[sta[p]] - P[sta[p - 1]]) * (P[i] - P[sta[p]]) >= 0) --p;
    sta[++p] = i;
  }
  for (int i = 1; i <= p; ++i) P[i] = P[sta[i]];
  double ans = max((double)m / P[1].x, (double)r / P[1].y);
  for (int i = 2; i <= p; ++i) {
    Point c = P[i] - P[i - 1];
    double head = 0, tail = 1;
    for (int j = 0; j < 100; ++j) {
      double m1 = (head + head + tail) / 3, m2 = (head + tail + tail) / 3;
      double X = P[i - 1].x + c.x * m1;
      double Y = P[i - 1].y + c.y * m1;
      double a1 = max(m / X, r / Y);
      X = P[i - 1].x + c.x * m2;
      Y = P[i - 1].y + c.y * m2;
      double a2 = max(m / X, r / Y);
      ans = min(a1, ans);
      ans = min(a2, ans);
      if (a1 > a2)
        head = m1;
      else
        tail = m2;
    }
  }
  printf("%.15f\n", ans);
}
