#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6 + 5;
multiset<int> s[maxn];
int n, w;
vector<pair<int, int> > ql[maxn], qr[maxn];
long long ans[maxn];
int main() {
  cin >> n >> w;
  for (int i = 1; i <= n; i++) {
    s[i].insert(-0x3f3f3f3f);
    int l;
    scanf("%d", &l);
    for (int j = 1; j <= l; j++) {
      int t;
      scanf("%d", &t);
      ql[j].push_back(make_pair(i, t));
      qr[w - l + j + 1].push_back(make_pair(i, t));
    }
    if (l < w) {
      ql[l + 1].push_back(make_pair(i, 0));
      ql[1].push_back(make_pair(i, 0));
      qr[w - l + 1].push_back(make_pair(i, 0));
    }
  }
  multiset<int>::iterator it, it1;
  long long sum = 0;
  for (int i = 1; i <= w; i++) {
    for (auto j : qr[i]) {
      it = s[j.first].lower_bound(j.second);
      it1 = it;
      it1++;
      if (it1 == s[j.first].end()) {
        it1--;
        it1--;
        if (it1 == s[j.first].begin())
          sum -= j.second;
        else
          sum += *it1 - j.second;
      }
      s[j.first].erase(it);
    }
    for (auto j : ql[i]) {
      s[j.first].insert(j.second);
      it = s[j.first].lower_bound(j.second);
      it1 = it;
      it1++;
      if (it1 == s[j.first].end()) {
        it1 = it;
        it1--;
        if (it1 == s[j.first].begin())
          sum += j.second;
        else
          sum += j.second - *it1;
      }
    }
    ans[i] = sum;
  }
  for (int i = 1; i <= w; i++) printf("%lld ", ans[i]);
  return 0;
}
