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 <iostream>
#include <cmath>
#include <iomanip>
using namespace std;

int n, k;
double x[60], y[60], c[60];

double dist(double x1, double y1, double x2, double y2) {
	return sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
}

bool jd(double tm) {
	int ct;

	for (int i = 0; i < n; i++) {
		ct = 0;

		for (int j = 0; j < n; j++)
			if (tm / c[j] >= dist(x[i], y[i], x[j], y[j]))
				ct++;

		if (ct >= k)
			return true;
	}

	for (int i = 0; i < n - 1; i++) {
		for (int j = i + 1; j < n; j++) {
			double c1r = tm / c[i], c2r = tm / c[j];

			if (c1r + c2r >= dist(x[i], y[i], x[j], y[j])) {
				double a, b, s, t, u;
				double v[2], w[2];

				if (y[i] == y[j]) {
					b = (x[i] + x[j] + (c1r * c1r - c2r * c2r) / (x[j] - x[i])) / 2;
					v[0] = b;
					v[1] = b;
					w[0] = y[i] - sqrt(c1r * c1r - (b - x[i]) * (b - x[i]));
					w[1] = y[i] + sqrt(c1r * c1r - (b - x[i]) * (b - x[i]));
				}
				else {
					a = (x[i] - x[j]) / (y[j] - y[i]);
					b = (c1r * c1r - c2r * c2r - x[i] * x[i] - y[i] * y[i] 
						+ x[j] * x[j] + y[j] * y[j]) / (2 * (y[j] - y[i]));

					s = a * a + 1;
					t = a * b - a * y[i] - x[i];
					u = x[i] * x[i] + (b - y[i]) * (b - y[i]) - c1r * c1r;

					v[0] = (-t - sqrt(t * t - s * u)) / s;
					v[1] = (-t + sqrt(t * t - s * u)) / s;
					w[0] = a * v[0] + b;
					w[1] = a * v[1] + b;
				}

				for (int q = 0; q < 2; q++){
					ct = 0;

					for (int k1 = 0; k1 < n; k1++) {
						if (k1 == i || k1 == j || tm / c[k1] >= dist(v[q], w[q], x[k1], y[k1]))
							ct++;
					}

					if (ct >= k)
						return true;
				}
			}
		}
	}

	return false;
}

int main()
{
	cin >> n >> k;

	for (int i = 0; i < n; i++)
		cin >> x[i] >> y[i] >> c[i];

	if (k == 1)
		cout << 0 << endl;
	else {
		double tmax = 1;

		while (!jd(tmax))
			tmax *= 2;

		double tmin = tmax / 2;

		while (tmax - tmin > 0.0000001) {
			double t1 = (tmax + tmin) / 2;

			if (jd(t1))
				tmax = t1;
			else
				tmin = t1;
		}

		cout << setiosflags(ios::fixed | ios::showpoint) << tmax << endl;
	}
}