Problem: Takahashi wants to grill N pieces of meat on a grilling net, which can be seen as a two-dimensional plane. The coordinates of the i-th piece of meat are \left(x_i, y_i\right), and its hardness is c_i.

Takahashi can use one heat source to grill the meat. If he puts the heat source at coordinates \left(X, Y\right), where X and Y are real numbers, the i-th piece of meat will be ready to eat in c_i \times \sqrt{\left(X - x_i\right)^2 + \left(Y-y_i\right)^2} seconds.

Takahashi wants to eat K pieces of meat. Find the time required to have K or more pieces of meat ready if he put the heat source to minimize this time.

Constraints

* All values in input are integers.
* 1 \leq N \leq 60
* 1 \leq K \leq N
* -1000 \leq x_i , y_i \leq 1000
* \left(x_i, y_i\right) \neq \left(x_j, y_j\right) \left(i \neq j \right)
* 1 \leq c_i \leq 100

Input

Input is given from Standard Input in the following format:


N K
x_1 y_1 c_1
\vdots
x_N y_N c_N


Output

Print the answer.

It will be considered correct if its absolute or relative error from our answer is at most 10^{-6}.

Examples

Input

4 3
-1 0 3
0 0 3
1 0 2
1 1 40


Output

2.4


Input

10 5
-879 981 26
890 -406 81
512 859 97
362 -955 25
128 553 17
-885 763 2
449 310 57
-656 -204 11
-270 76 40
184 170 16


Output

7411.2252

Solution (in CPP):

Solution:
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define rep(i, a, b) for (int i = (a); i < (b); i++)
#ifdef tabr
#include "library/debug.cpp"
#else
#define debug(...) 0
#endif

using cpx = complex<double>;

double dist(cpx a, cpx b) {
    return abs(a - b);
}

pair<int, pair<cpx, cpx>> intersect(cpx a, cpx b, double s, double t) {
    pair<cpx, cpx> res = {{0, 0}, {0, 0}};
    if (abs(a - b) > s + t - 1e-8) {
        return {0, res};
    }
    if (abs(abs(a - b) - s - t) < 1e-8) {
        res.first = (a * s + b * t) / (s + t);
        return {1, res};
    }
    double d = abs(b - a);
    cpx x = (b - a) * (d * d + s * s - t * t) / (d * d * 2.0);
    cpx y = (b - a) * sqrt(max(s * s - abs(x) * abs(x), 0.0)) / d;
    y *= (cpx){0, -1};
    res.first = a + x + y;
    res.second = a + x - y;
    return {2, res};
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    int n, k;
    cin >> n >> k;
    vector<double> x(n), y(n), c(n);
    vector<cpx> z(n);
    rep(i, 0, n) {
        cin >> x[i] >> y[i] >> c[i];
        z[i] = {x[i], y[i]};
    }
    double l = 0, r = 1e7;
    while (r - l > 1e-8) {
        double t = (l + r) / 2;
        vector<double> d(n);
        rep(i, 0, n) d[i] = t / c[i];
        vector<cpx> p = z;
        rep(i, 0, n) rep(j, i + 1, n) {
            pair<int, pair<cpx, cpx>> q = intersect(z[i], z[j], d[i], d[j]);
            if (q.first >= 1) p.emplace_back(q.second.first);
            if (q.first == 2) p.emplace_back(q.second.second);
        }
        bool ok = false;
        for (cpx a : p) {
            int cnt = 0;
            rep(i, 0, n) {
                if (abs(z[i] - a) <= d[i] + 1e-8) cnt++;
            }
            if (cnt >= k) {
                ok = true;
                break;
            }
        }
        if (ok)
            r = t;
        else
            l = t;
    }
    debug(intersect({1, 1}, {3, 0}, 2, 3));
    cout << fixed << setprecision(10);
    cout << r << endl;
    return 0;
}