2f456d204dd4796542232930ca4247defb8ee6570eb6f5ed7152f1268610ef78
// https://szkopul.edu.pl/problemset/problem/ocGBMr4-sFMy6iEUQ6cZ6gNW/site/?key=statement
#include <algorithm>
#include <iostream>
#include <math.h>
constexpr int sizik = 100 * 1001;
typedef long long ll;
std::pair<int, int> arr[sizik];
int main() {
std::ios_base::sync_with_stdio(0);
std::cin.tie(0);
std::cout.tie(0);
int n, k;
std::cin >> n >> k;
for (int i = 0; i < n; i++) {
int l, z;
std::cin >> l >> z;
arr[i].second = z;
ll local_zas = 0;
for (int j = 0; j < l; j++) {
// x, y
int a, b;
std::cin >> a >> b;
ll sum = (ll)a * a + (ll)b * b;
ll sq = sqrt(sum);
if (sq * sq < sum) {
sq++;
}
local_zas = std::max(local_zas, sq);
}
arr[i].first = local_zas;
}
std::sort(arr, arr + n);
ll ans = 0, sum = 0;
for (int i = 0; i < n; i++) {
sum += arr[i].second;
ll search = arr[i].first;
ll x = search / k;
if (k * x < search) {
x++;
}
ll cost = ((x - 1) * x) / 2;
ans = std::max(ans, sum - cost);
}
std::cout << ans << '\n';
return 0;
}