Problem: Equilateral Triangular Fence

Ms. Misumi owns an orchard along a straight road. Recently, wild boars have been witnessed strolling around the orchard aiming at pears, and she plans to construct a fence around many of the pear trees.

The orchard contains n pear trees, whose locations are given by the two-dimensional Euclidean coordinates (x1, y1),..., (xn, yn). For simplicity, we neglect the thickness of pear trees. Ms. Misumi's aesthetic tells that the fence has to form a equilateral triangle with one of its edges parallel to the road. Its opposite apex, of course, should be apart from the road. The coordinate system for the positions of the pear trees is chosen so that the road is expressed as y = 0, and the pear trees are located at y ≥ 1.

Due to budget constraints, Ms. Misumi decided to allow at most k trees to be left outside of the fence. You are to find the shortest possible perimeter of the fence on this condition.

The following figure shows the first dataset of the Sample Input. There are four pear trees at (−1,2), (0,1), (1,2), and (2,1). By excluding (−1,2) from the fence, we obtain the equilateral triangle with perimeter 6.

<image>

Input

The input consists of multiple datasets, each in the following format.

> n
>  k
>  x1 y1
>  ...
>  xn yn
>

Each of the datasets consists of n+2 lines. n in the first line is the integer representing the number of pear trees; it satisfies 3 ≤ n ≤ 10 000. k in the second line is the integer representing the number of pear trees that may be left outside of the fence; it satisfies 1 ≤ k ≤ min(n−2, 5 000). The following n lines have two integers each representing the x- and y- coordinates, in this order, of the locations of pear trees; it satisfies −10 000 ≤ xi ≤ 10 000, 1 ≤ yi ≤ 10 000. No two pear trees are at the same location, i.e., (xi, yi)=(xj, yj) only if i=j.

The end of the input is indicated by a line containing a zero. The number of datasets is at most 100.

Output

For each dataset, output a single number that represents the shortest possible perimeter of the fence. The output must not contain an error greater than 10−6.

Sample Input


4
1
0 1
1 2
-1 2
2 1
4
1
1 1
2 2
1 3
1 4
4
1
1 1
2 2
3 1
4 1
4
1
1 2
2 1
3 2
4 2
5
2
0 1
0 2
0 3
0 4
0 5
6
3
0 2
2 2
1 1
0 3
2 3
1 4
0


Output for the Sample Input


6.000000000000
6.928203230276
6.000000000000
7.732050807569
6.928203230276
6.000000000000






Example

Input

4
1
0 1
1 2
-1 2
2 1
4
1
1 1
2 2
1 3
1 4
4
1
1 1
2 2
3 1
4 1
4
1
1 2
2 1
3 2
4 2
5
2
0 1
0 2
0 3
0 4
0 5
6
3
0 2
2 2
1 1
0 3
2 3
1 4
0


Output

6.000000000000
6.928203230276
6.000000000000
7.732050807569
6.928203230276
6.000000000000

Solution (in CPP):

Solution:
#include <algorithm>
#include <iostream>
#include <complex>
#include <cstdio>
#include <utility>
#include <vector>
#include <cmath>
using namespace std;
using W = double;
using P = complex<W>;
using L = pair<P,P>;
using C = pair<P,W>;
using Poly = vector<P>;
#define X real()
#define Y imag()
const W EPS = (1e-7), pi = acos(-1);

namespace std{
  bool operator < (const P& a, const P& b){
    return a.X != b.X ? a.X < b.X : a.Y < b.Y;
  }
  bool cmp_y(const P &a, const P &b){
    return a.Y != b.Y ? a.Y < b.Y : a.X < b.X;
  }
  bool operator == (const P& a, const P& b){
    return abs(a-b) < EPS;
  }
}

double dot(P a, P b){ return a.X * b.X + a.Y * b.Y;}
W cross(P a, P b){ return a.X * b.Y - a.Y * b.X;}
P projection(P a, P b){ return dot(a, b)/abs(b)/abs(b)*b;}

//直線aと直線bの交点
P intersection(L a, L b){
  P af = a.first, as = a.second, bf = b.first, bs = b.second;
  return af + cross(bs-bf,af-bf)/(-cross(bs-bf,as-bf)+cross(bs-bf,af-bf))*(as-af);
}

int main(){
  int n;
  P a = P(1,0)*P(cos(-2*pi/3),sin(-2*pi/3));
  P b = P(1,0)*P(cos(-1*pi/3),sin(-1*pi/3));
  while(cin >> n, n){
    int k;
    cin >> k;
    vector<P> ps;
    vector<W> ys;
    for(int i = 0; i < n; ++i){
      W x, y;
      cin >> x >> y;
      ps.emplace_back(x,y);
      ys.push_back(y);
    }
    sort(ps.begin(), ps.end(), cmp_y);
    sort(ys.begin(), ys.end());
    int t = 0;
    W ans = 1e9;
    L base(P(0,0),P(1,0));
    vector<pair<W,int>> V;
    for(int j = 0; j < n; ++j){
      P p = ps[j];
      L l(p,p+a), r(p,p+b);
      V.emplace_back(intersection(base,l).X,-j-1);
      V.emplace_back(intersection(base,r).X,j+1);
    }
    sort(V.begin(), V.end());
    vector<bool> alive(n,true);
    for(int i = 0; i < n; ++i){
      if(i > 0 and abs(ys[i]-ys[i-1]) < EPS) continue;
      while(ps[t].Y < ys[i]-EPS){
        alive[t] = false;
        ++t;
      }
      if(t > k) break;
      W r = 0;
      int s = 0;
      size_t m = 0;
      vector<bool> alive_ = alive;
      vector<bool> used(n,false);
      W d = ys[i]/sqrt(3)*2;
      for(size_t j = 0; j < V.size(); ++j){
        W l = V[j].first;
        int idx = V[j].second;
        if(idx >= 0) continue;
        if(not alive_[-idx-1]) continue;
        while(m < V.size() and s < n-k){
          int idx_ = V[m].second;
          if(idx_ <= 0 or (not alive_[idx_-1]) or V[m].first < l + d - EPS){
            ++m;
            continue;
          }
          r = V[m].first;
          ++s;
          ++m;
          used[idx_-1] = true;
        }
        if(s < n-k) break;
        ans = min(ans,r-l-d);
        alive_[-idx-1] = false;
        if(used[-idx-1]){
          --s;
          used[-idx-1] = false;
        }
      }
    }
    printf("%.12f\n",ans*3);
  }
}