#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-8;
const int MaxN = 1005;
const int MaxE = MaxN * 4;
const double pi = acos(-1.0);
const double pi2 = 2 * acos(-1.0);
inline int sgn(double x) { return x < -eps ? -1 : x > eps; }
pair<double, int> e[MaxE];
double x[MaxN], y[MaxN], r[MaxN];
int n, en, K, cnt;
inline bool comp(const pair<double, int>& lhs, const pair<double, int>& rhs) {
  if (sgn(lhs.first - rhs.first))
    return lhs.first < rhs.first;
  else
    return lhs.second < rhs.second;
}
inline void read() {
  for (int i = 0; i < n; i++) scanf("%lf%lf%lf", &x[i], &y[i], &r[i]);
}
inline double def(double x) {
  while (sgn(x) < 0) x += pi2;
  while (sgn(x - pi2) >= 0) x -= pi2;
  return x;
}
inline void add_e(double low, double high) {
  low = def(low);
  high = def(high);
  e[en++] = make_pair(low, 1);
  e[en++] = make_pair(high, -1);
  if (sgn(low - high) > 0) cnt++;
}
inline long long doit() {
  int ret = 1;
  for (int i = 0; i < n; i++) {
    en = 0;
    cnt = 0;
    e[en++] = make_pair(0, 1);
    e[en++] = make_pair(pi2, -1);
    for (int j = 0; j < n; j++)
      if (i ^ j) {
        double d = hypot(x[j] - x[i], y[j] - y[i]);
        double ang = atan2(y[j] - y[i], x[j] - x[i]);
        double alpha = pi / 2.0 - asin((r[i] - r[j]) / d);
        double beta = pi / 2.0 - asin((r[i] + r[j]) / d);
        add_e(ang - alpha, ang - beta);
        add_e(ang + beta, ang + alpha);
      }
    sort(e, e + en, comp);
    for (int j = 0; j < en; j++) {
      cnt += e[j].second;
      ret = max(ret, cnt);
    }
  }
  return (long long)K * (K + 1) / 2 + 1 + (long long)(ret - 1) * (K + 1) + n -
         ret;
}
int main() {
  while (scanf("%d%d", &n, &K) == 2) {
    read();
    printf("%I64d\n", doit());
  }
  return 0;
}

### Prompt

Your task is to create a CPP solution to the following problem:

Anna's got a birthday today. She invited many guests and cooked a huge (nearly infinite) birthday cake decorated by n banana circles of different sizes. Maria's birthday is about to start in 7 minutes too, and while Anna is older, she decided to play the boss a little. She told Maria to cut the cake by k straight-line cuts (the cutting lines can intersect) to divide banana circles into banana pieces. 

Anna has many guests and she wants everyone to get at least one banana piece. That's why she told Maria to make the total number of banana pieces maximum. It's not a problem if some banana pieces end up on the same cake piece — the key is to make the maximum number of banana pieces. Determine what result Maria will achieve.

Input

The first line contains two integers n and k — the number of banana circles and the number of cuts Maria should perform (1 ≤ n ≤ 1000, 1 ≤ k ≤ 105). Next n lines contain the positions and sizes of the banana circles (all banana circles are round). On the cake the Cartesian coordinate system is defined. Each line contains three integers x, y and r — the coordinates of the center of the corresponding banana piece and its radius ( - 1000 ≤ x, y ≤ 1000, 1 ≤ r ≤ 1000).

It is guaranteed that the banana circles do not intersect, do not touch each other and do not overlap with each other.

Pretest 10 is big test with n = k = 1000.

Output

Print the only integer — the largest number of banana pieces that Maria can get after she performs the k straight-line cuts.

Please do not use the %lld specificator to read or write 64-bit integers in C++. It is preferred to use the cin, cout streams or the %I64d specificator.

Examples

Input

1 1
0 0 1


Output

2


Input

3 1
0 0 1
3 0 1
6 0 1


Output

6


Input

1 3
0 0 1


Output

7

### Response

```cpp
#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-8;
const int MaxN = 1005;
const int MaxE = MaxN * 4;
const double pi = acos(-1.0);
const double pi2 = 2 * acos(-1.0);
inline int sgn(double x) { return x < -eps ? -1 : x > eps; }
pair<double, int> e[MaxE];
double x[MaxN], y[MaxN], r[MaxN];
int n, en, K, cnt;
inline bool comp(const pair<double, int>& lhs, const pair<double, int>& rhs) {
  if (sgn(lhs.first - rhs.first))
    return lhs.first < rhs.first;
  else
    return lhs.second < rhs.second;
}
inline void read() {
  for (int i = 0; i < n; i++) scanf("%lf%lf%lf", &x[i], &y[i], &r[i]);
}
inline double def(double x) {
  while (sgn(x) < 0) x += pi2;
  while (sgn(x - pi2) >= 0) x -= pi2;
  return x;
}
inline void add_e(double low, double high) {
  low = def(low);
  high = def(high);
  e[en++] = make_pair(low, 1);
  e[en++] = make_pair(high, -1);
  if (sgn(low - high) > 0) cnt++;
}
inline long long doit() {
  int ret = 1;
  for (int i = 0; i < n; i++) {
    en = 0;
    cnt = 0;
    e[en++] = make_pair(0, 1);
    e[en++] = make_pair(pi2, -1);
    for (int j = 0; j < n; j++)
      if (i ^ j) {
        double d = hypot(x[j] - x[i], y[j] - y[i]);
        double ang = atan2(y[j] - y[i], x[j] - x[i]);
        double alpha = pi / 2.0 - asin((r[i] - r[j]) / d);
        double beta = pi / 2.0 - asin((r[i] + r[j]) / d);
        add_e(ang - alpha, ang - beta);
        add_e(ang + beta, ang + alpha);
      }
    sort(e, e + en, comp);
    for (int j = 0; j < en; j++) {
      cnt += e[j].second;
      ret = max(ret, cnt);
    }
  }
  return (long long)K * (K + 1) / 2 + 1 + (long long)(ret - 1) * (K + 1) + n -
         ret;
}
int main() {
  while (scanf("%d%d", &n, &K) == 2) {
    read();
    printf("%I64d\n", doit());
  }
  return 0;
}

```