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;
#define all(x) (x).begin(),(x).end()
const int mod=1000000007,MAX=1<<20,INF=1<<20;
const long double eps=1e-13;

int main(){
    
    std::ifstream in("text.txt");
    std::cin.rdbuf(in.rdbuf());
    cin.tie(0);
    ios::sync_with_stdio(false);
    
    int N,K;cin>>N>>K;
    vector<long double> x(N),y(N),c(N);
    for(int i=0;i<N;i++) cin>>x[i]>>y[i]>>c[i];
    
    long double left=0.0,right=1e6;
    
    if(K==1){
        cout<<0<<endl;
        return 0;
    }
    
    if(K==2){
        long double ans=INF;
        for(int i=0;i<N;i++){
            for(int j=i+1;j<N;j++){
                ans=min(ans,(hypot(x[i]-x[j],y[i]-y[j])*c[i]*c[j])/(c[i]+c[j]));
            }
        }
        cout<<setprecision(25)<<ans<<endl;
        return 0;
    }
    
    for(int q=0;q<100;q++){
        long double mid=(left+right)/2.0;
        bool ok=false;
        
        for(int i=0;i<N;i++){
            for(int j=0;j<N;j++){
                if(i==j) continue;
                int cnt=0;
                long double ri=mid/c[i],rj=mid/c[j];
                if(ri>rj+eps) continue;
                if(hypot(x[i]-x[j],y[i]-y[j])>ri+rj+eps) continue;
                
                long double x1=x[j]-x[i],y1=y[j]-y[i],a=(x1*x1+y1*y1+ri*ri-rj*rj)/2.0;
                
                long double xx=(a*x1+y1*sqrt((x1*x1+y1*y1)*ri*ri-a*a))/(x1*x1+y1*y1);
                long double yy=(a*y1-x1*sqrt((x1*x1+y1*y1)*ri*ri-a*a))/(x1*x1+y1*y1);
                
                xx+=x[i];
                yy+=y[i];
                
                if(hypot(x1,y1)+ri<rj+eps) continue;
                
                for(int k=0;k<N;k++){
                    if(hypot(xx-x[k],yy-y[k])<=mid/c[k]+eps) cnt++;
                }
                if(cnt>=K) ok=true;
            }
        }
        
        for(int i=0;i<N;i++){
            int cnt=0;
            for(int k=0;k<N;k++){
                if(hypot(x[i]-x[k],y[i]-y[k])<=mid/c[k]+eps) cnt++;
            }
            if(cnt>=K) ok=true;
        }
        
        if(ok) right=mid;
        else left=mid;
    }
    
    cout<<setprecision(25)<<right<<endl;
}