#include <bits/stdc++.h>
using namespace std;
namespace seg {
long long tree[1024 * 1024 * 2];
void ig() {
  for (long long i = 0; i < 1024 * 1024 * 2; i++) tree[i] = -1e10;
}
void upd(long long x, long long y) {
  x = x + 1024 * 1024 - 1;
  while (x) tree[x] = max(tree[x], y), x = x / 2;
}
long long ask(long long a, long long b, long long l, long long r,
              long long id) {
  if (l >= a and r <= b) return tree[id];
  long long u = -1e10;
  if (a <= (l + r) / 2) u = max(u, ask(a, b, l, (l + r) / 2, id << 1));
  if (b > (l + r) / 2) u = max(u, ask(a, b, (l + r) / 2 + 1, r, id << 1 | 1));
  return u;
}
};  // namespace seg
vector<long long> arr[1024 * 1024];
long long ql[1024 * 1024], qs[1024 * 1024], qq[1024 * 1024];
long long alr = 0;
vector<long long> add[1024 * 1024], era[1024 * 1024];
long long red() {
  long long x;
  scanf("%lld", &x);
  return x;
}
long long w;
void geta(long long ui) {
  long long n;
  scanf("%lld", &n);
  arr[ui].push_back(-1e10);
  for (long long i = 0; i < n; i++)
    arr[ui].push_back(red()), seg::upd(alr + i + 1, arr[ui][i + 1]);
  ql[ui] = alr, alr += n;
  qs[ui] = n;
  qq[ui] = -1e10;
  for (long long i = 1; i <= n; i++) qq[ui] = max(qq[ui], arr[ui][i]);
  if (n <= w / 2 - 20)
    ;
  else {
    add[1].push_back(ui);
    return;
  }
  add[1].push_back(ui);
  era[n + 2].push_back(ui);
  add[w - n - 2].push_back(ui);
}
long long n;
long long extra;
vector<long long> all;
long long in[1024 * 1024];
signed main() {
  scanf("%lld%lld", &n, &w);
  seg::ig();
  for (long long i = 0; i < n; i++) {
    geta(i);
    extra += max(0ll, qq[i]);
  }
  for (long long x = 1; x <= w; x++) {
    for (long long i = 0; i < add[x].size(); i++)
      all.push_back(add[x][i]), extra -= max(0ll, qq[add[x][i]]),
          in[add[x][i]] = 1;
    for (long long i = 0; i < era[x].size(); i++)
      extra += max(0ll, qq[era[x][i]]), in[era[x][i]] = 0;
    long long ans = extra;
    vector<long long> al;
    for (long long i = 0; i < all.size(); i++)
      if (in[all[i]]) {
        long long ui = all[i];
        long long l = 1, r = qs[ui];
        l = max(l, qs[ui] - (w - x));
        r = min(r, x);
        long long o = seg::ask(l + ql[ui], r + ql[ui], 1, 1024 * 1024, 1);
        if (max(x - 1, w - x) >= qs[ui]) o = max(o, 0ll);
        ans += o;
        al.push_back(all[i]);
      }
    swap(al, all);
    if (x) printf("%lld ", ans);
  }
  return 0;
}
