#include #include #include #include #include #include #include #include #include using namespace std; struct P { int x, y; }; int dist(P &l, P &r) { return (l.x - r.x) * (l.x - r.x) + (l.y - r.y) * (l.y - r.y); } struct D { int b, r, dist; bool operator<(const D &x) { return tie(dist, b, r) < tie(x.dist, x.b, x.r); } }; template void subset(vector::iterator &b, vector::iterator &e, int k, vector &out, F f) { if(k == 0) { f(out); return; } if(k > e - b) return; out.push_back(*b); ++b; subset(b, e, k - 1, out, f); out.pop_back(); subset(b, e, k, out, f); --b; } int main() { int n, b, r; cin >> n >> b >> r; vector

ps(b + r); for(auto &p : ps) cin >> p.x >> p.y; vector is(b + r), out; iota(is.begin(), is.end(), 0); int best = 0; auto be = is.begin(), e = is.end(); subset(be, e, n, out, [&](const vector &is) { int d = 1e9; for(auto a = is.begin(); *a < b; ++a) for(auto e = is.rbegin(); *e >= b; ++e) d = min(d, dist(ps[*a], ps[*e])); best = max(best, d); }); cout << fixed << setprecision(11) << sqrt(double(best)) << endl; return 0; }