#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
#include<string>
#include<stack>
#include<list>
#include<set>

using namespace std;

#define DEBUG_FLAG

#define max(a,b) (a>b?a:b)
#define min(a,b) (a<b?a:b)
#ifdef DEBUG_FLAG
    #define dbgout(fmt, ...) fprintf(stderr, "\033[1;33mDEBUG(%s:%d):\t\033[0m" fmt, __func__, __LINE__, ##__VA_ARGS__)
#else
    #define dbgout(fmt, ...) 
#endif

const double eps = 1e-8;

double dis(double x,double y, double X,double Y){
	return sqrt((X-x)*(X-x)+(Y-y)*(Y-y));
}

struct meat
{
    double x,y,c;
};

vector<meat> meats;

vector<pair<double,double>> cal(double x1,double y1,double r1,double x2,double y2,double r2) {
    x1-=x2,y1-=y2;
    double S=x1*x1+y1*y1,a=(S+r2*r2-r1*r1)/2,D=S*r2*r2-a*a;
    if(D<0) return {};
    double A1=a*x1,B1=y1*sqrt(D);
    double A2=a*y1,B2=x1*sqrt(D);
    return {{(A1+B1)/S+x2,(A2-B2)/S+y2},{(A1-B1)/S+x2,(A2+B2)/S+y2}};
}

bool solve(double T, int K, int N)
{
    vector<pair<double,double> > jiaodians;
    double r[N];
    for (int i = 0; i < N; i++) r[i] = T / meats[i].c;
    for (int i = 0; i < N; i++) {
        jiaodians.push_back({meats[i].x, meats[i].y});
        for (int j = i+1; j < N; j++) {
            vector<pair<double, double>> vcal = cal(meats[i].x, meats[i].y, r[i], meats[j].x, meats[j].y, r[j]);
            for (pair<double, double> it:vcal) jiaodians.push_back(it);
        }
    }
    for (pair<double, double> it:jiaodians) {
        int cnt = 0;
        for (int i = 0; i < N; i++) {
            if (r[i] + eps >= dis(it.first, it.second, meats[i].x, meats[i].y)) cnt++;
        }
        if (cnt >= K) return true;
    }
    return false;
}

int main(void)
{
    int N, K;
    double l = 0, r = 1e7, mid;
    cin >> N >> K;
    for (int i = 0; i < N; i++) {
        meat t;
        cin >> t.x >> t.y >> t.c;
        meats.push_back(t);
    }
    bool flag = false;
    while (l + eps <= r)
    {
        mid = (l + r) / 2;
        if (solve(mid, K, N)) {
            r = mid;
            flag = true;
        } else {
            l = mid;
        }
    }
    if (!flag) {
        cout << -1 << endl;
    } else {
        printf("%lf\n", l);
    }
    return 0;
}
### Prompt

Your task is to create a Cpp solution to the following 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

### Response

```cpp
#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
#include<string>
#include<stack>
#include<list>
#include<set>

using namespace std;

#define DEBUG_FLAG

#define max(a,b) (a>b?a:b)
#define min(a,b) (a<b?a:b)
#ifdef DEBUG_FLAG
    #define dbgout(fmt, ...) fprintf(stderr, "\033[1;33mDEBUG(%s:%d):\t\033[0m" fmt, __func__, __LINE__, ##__VA_ARGS__)
#else
    #define dbgout(fmt, ...) 
#endif

const double eps = 1e-8;

double dis(double x,double y, double X,double Y){
	return sqrt((X-x)*(X-x)+(Y-y)*(Y-y));
}

struct meat
{
    double x,y,c;
};

vector<meat> meats;

vector<pair<double,double>> cal(double x1,double y1,double r1,double x2,double y2,double r2) {
    x1-=x2,y1-=y2;
    double S=x1*x1+y1*y1,a=(S+r2*r2-r1*r1)/2,D=S*r2*r2-a*a;
    if(D<0) return {};
    double A1=a*x1,B1=y1*sqrt(D);
    double A2=a*y1,B2=x1*sqrt(D);
    return {{(A1+B1)/S+x2,(A2-B2)/S+y2},{(A1-B1)/S+x2,(A2+B2)/S+y2}};
}

bool solve(double T, int K, int N)
{
    vector<pair<double,double> > jiaodians;
    double r[N];
    for (int i = 0; i < N; i++) r[i] = T / meats[i].c;
    for (int i = 0; i < N; i++) {
        jiaodians.push_back({meats[i].x, meats[i].y});
        for (int j = i+1; j < N; j++) {
            vector<pair<double, double>> vcal = cal(meats[i].x, meats[i].y, r[i], meats[j].x, meats[j].y, r[j]);
            for (pair<double, double> it:vcal) jiaodians.push_back(it);
        }
    }
    for (pair<double, double> it:jiaodians) {
        int cnt = 0;
        for (int i = 0; i < N; i++) {
            if (r[i] + eps >= dis(it.first, it.second, meats[i].x, meats[i].y)) cnt++;
        }
        if (cnt >= K) return true;
    }
    return false;
}

int main(void)
{
    int N, K;
    double l = 0, r = 1e7, mid;
    cin >> N >> K;
    for (int i = 0; i < N; i++) {
        meat t;
        cin >> t.x >> t.y >> t.c;
        meats.push_back(t);
    }
    bool flag = false;
    while (l + eps <= r)
    {
        mid = (l + r) / 2;
        if (solve(mid, K, N)) {
            r = mid;
            flag = true;
        } else {
            l = mid;
        }
    }
    if (!flag) {
        cout << -1 << endl;
    } else {
        printf("%lf\n", l);
    }
    return 0;
}
```