#include <bits/stdc++.h>
using namespace std;
namespace io {
inline char nc() {
  static char buf[100000], *p1 = buf, *p2 = buf;
  return p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 100000, stdin), p1 == p2)
             ? EOF
             : *p1++;
}
template <class I>
inline void fr(I &num) {
  num = 0;
  register char c = nc();
  register int p = 1;
  while (c < '0' || c > '9') c == '-' ? p = -1, c = nc() : c = nc();
  while (c >= '0' && c <= '9') num = num * 10 + c - '0', c = nc();
  num *= p;
}
template <class I>
inline I Max(I p, I q) {
  return p > q ? p : q;
}
template <class I>
inline I Min(I p, I q) {
  return p < q ? p : q;
}
template <class I>
inline I A(I x) {
  return x < 0 ? -x : x;
}
template <class I>
inline void sp(I &p, I &q) {
  I x = p;
  p = q, q = x;
}
template <class I>
inline void ckMax(I &p, I q) {
  p = (p > q ? p : q);
}
template <class I>
inline void ckMin(I &p, I q) {
  p = (p < q ? p : q);
}
};  // namespace io
using io ::A;
using io ::ckMax;
using io ::ckMin;
using io ::fr;
using io ::Max;
using io ::Min;
using io ::nc;
using io ::sp;
const int N = 1000005;
map<pair<int, int>, int> mp;
int n, k, cn, d;
inline void gcd(const int a, const int b) {
  return !b ? d = a, void() : gcd(b, a % b);
}
inline double dis(const int x, const int y) {
  return sqrt(1.0 * x * x + 1.0 * y * y);
}
struct ky {
  int x, y;
  double ds;
  bool operator<(const ky &p) const { return ds < p.ds; }
};
vector<ky> vec[N];
vector<double> o;
int main() {
  scanf("%d%d", &n, &k);
  const int kk = k >> 1;
  register double ans = 0;
  for (register int i = 1, x, y; i <= n; ++i) {
    scanf("%d%d", &x, &y);
    if ((!x) && (!y)) {
      vec[++cn].push_back((ky){x, y, 0});
      continue;
    }
    gcd(A(x), A(y));
    pair<int, int> p = make_pair(x / d, y / d);
    if (!mp[p]) mp[p] = ++cn;
    vec[mp[p]].push_back((ky){x, y, dis(x, y)});
  }
  for (register int j = 1, i; j <= cn; ++j) {
    const int sz = vec[j].size();
    register int mn = Min(kk, sz);
    std::sort(vec[j].begin(), vec[j].end());
    for (i = 1; i <= mn; ++i)
      o.push_back(vec[j][sz - i].ds * ((k - i) - (i - 1)));
    double s = 0;
    mn = Min(k, sz);
    for (i = kk + 1; i <= mn; ++i)
      o.push_back(vec[j][i - kk - 1].ds * ((k - kk - 1) - kk) - 2.0 * s),
          s += vec[j][i - kk - 1].ds;
  }
  std::sort(o.begin(), o.end());
  for (register int i = o.size() - 1; (~i) && k; --i) ans += o[i], --k;
  printf("%.9lf", ans);
  return 0;
}
