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;
typedef long long ll;
const int INF = (1<<30);
const ll INFLL = (1ll<<60);
const ll MOD = (ll)(1e9+7);
const long double EPS = 1e-10L;

#define l_ength size

void mul_mod(ll& a, ll b){
	a *= b;
	a %= MOD;
}

void add_mod(ll& a, ll b){
	a = (a<MOD)?a:(a-MOD);
	b = (b<MOD)?b:(b-MOD);
	a += b;
	a = (a<MOD)?a:(a-MOD);
}

int n,m;
long double x[66],y[66],c[66],r[66];

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

bool judge(long double t){
	int i,j,k,cnt=0;
	long double xc,yc,a,p,q;
	for(i=0; i<n; ++i){
		r[i] = t/c[i];
	}
	for(i=0; i<n; ++i){
		cnt = 0;
		for(k=0; k<n; ++k){
			if(r[k]>=dist(x[k],y[k],x[i],y[i])+EPS){
				++cnt;
			}
		}
		if(cnt>=m){
			return true;
		}
		for(j=0; j<i; ++j){
			p = x[j]-x[i]; q = y[j]-y[i];
			a = p*p+q*q-r[j]*r[j]+r[i]*r[i]; a/=2.0L;
			if(dist(x[i],y[i],x[j],y[j])>r[i]+r[j]+EPS){
				continue;
			}
			if(dist(x[i],y[i],x[j],y[j])+EPS<abs(r[i]-r[j])){
				continue;
			}
			cnt = 0;
			xc = a*p+q*sqrt((p*p+q*q)*r[i]*r[i]-a*a); xc /= (p*p+q*q); xc += x[i];
			yc = a*q-p*sqrt((p*p+q*q)*r[i]*r[i]-a*a); yc /= (p*p+q*q); yc += y[i];
			for(k=0; k<n; ++k){
				if(r[k]+EPS>=dist(x[k],y[k],xc,yc)){
					++cnt;
				}
			}
			if(cnt>=m){
				return true;
			}
			cnt = 0;
			xc = a*p-q*sqrt((p*p+q*q)*r[i]*r[i]-a*a); xc /= (p*p+q*q); xc += x[i];
			yc = a*q+p*sqrt((p*p+q*q)*r[i]*r[i]-a*a); yc /= (p*p+q*q); yc += y[i];
			for(k=0; k<n; ++k){
				if(r[k]+EPS>=dist(x[k],y[k],xc,yc)){
					++cnt;
				}
			}
			if(cnt>=m){
				return true;
			}
		}
	}
	return false;
}

int main(void){
	int i;
	long double ok=4e6L,ng=0.0L,med;
	cin >> n >> m;
	for(i=0; i<n; ++i){
		cin >> x[i] >> y[i] >> c[i];
	}
	for(i=0; i<100; ++i){
		med = (ok+ng)/2.0L;
		if(judge(med)){
			ok = med;
		}else{
			ng = med;
		}
	}
	cout << fixed << setprecision(20) << ok << endl; 
	return 0;
}