#include <bits/stdc++.h>
using namespace std;
const int maxn = 5e5;
int n, k, tot;
map<pair<int, int>, int> M;
vector<double> arm[maxn + 5];
int mabs(int x) { return x < 0 ? -x : x; }
int gcd(int a, int b) { return b ? gcd(b, a % b) : a; }
double solve_center() {
  vector<double> vec;
  vec.push_back(0);
  for (int i = (1); i <= int(tot); i++)
    for (int j = (0); j <= int(arm[i].size() - 1); j++)
      vec.push_back(arm[i][j] * (k - 1 - j * 2));
  sort(vec.begin(), vec.end());
  reverse(vec.begin(), vec.end());
  double res = 0;
  for (int i = (0); i <= int(k - 1); i++) res += vec[i];
  return res;
}
double solve_arm() {
  int t = (k + 1) / 2, p = 0;
  for (int i = (1); i <= int(tot); i++)
    if (n - arm[i].size() + t + 1 <= k) {
      p = i;
      break;
    }
  if (!p) return -1e18;
  double res = 0;
  for (int i = (1); i <= int(tot); i++)
    if (i != p)
      for (int j = (0); j <= int(arm[i].size() - 1); j++) {
        double x = arm[i][j] - (j == arm[i].size() - 1 ? 0 : arm[i][j + 1]);
        res += x * (j + 1) * (k - 1 - j);
      }
  for (int i = (0); i <= int(arm[p].size() - 1); i++) {
    double x = arm[p][i] - (i == arm[p].size() - 1 ? 0 : arm[p][i + 1]);
    int y = i < t                                            ? i + 1
            : arm[p].size() - i <= k - t - n + arm[p].size() ? n - 1 - i
                                                             : t;
    res += x * y * (k - y);
  }
  return res;
}
int main() {
  scanf("%d %d", &n, &k);
  for (int i = 1, x, y, d; i <= n; i++) {
    scanf("%d %d", &x, &y);
    if (!x && !y) continue;
    d = gcd(mabs(x), mabs(y));
    if (!M[pair<int, int>(x / d, y / d)])
      M[pair<int, int>(x / d, y / d)] = ++tot;
    arm[M[pair<int, int>(x / d, y / d)]].push_back(
        sqrt(1ll * x * x + 1ll * y * y));
  }
  for (int i = (1); i <= int(tot); i++) {
    sort(arm[i].begin(), arm[i].end());
    reverse(arm[i].begin(), arm[i].end());
  }
  printf("%.12lf\n", max(solve_center(), solve_arm()));
  return 0;
}
