#include <bits/stdc++.h>
using namespace std;
const double PI = acos(-1.0);
const int INF = 1000 * 1000 * 1000 + 7;
const long long LINF = (long long)INF * INF;
const int MAX = 1 << 20;
int n, w;
long long T[MAX];
void upd(int pos, int d) {
  for (; pos < w; pos |= pos + 1) T[pos] += d;
}
long long query(int pos) {
  long long res = 0;
  for (; pos >= 0; pos = (pos & (pos + 1)) - 1) res += T[pos];
  return res;
}
int a[MAX];
pair<int, pair<bool, int> > ev[MAX << 1];
long long ans[MAX];
int main() {
  scanf("%d%d", &n, &w);
  for (int i = (0); i < (n); ++i) {
    int l;
    scanf("%d", &l);
    for (int j = (0); j < (l); ++j) scanf("%d", a + j);
    int sz = 0;
    for (int j = (0); j < (l); ++j) {
      ev[sz++] = make_pair(j, make_pair(false, a[j]));
      ev[sz++] = make_pair(j + w - l + 1, make_pair(true, a[j]));
    }
    ev[sz++] = make_pair(0, make_pair(false, 0));
    ev[sz++] = make_pair(w - l, make_pair(true, 0));
    ev[sz++] = make_pair(l, make_pair(false, 0));
    ev[sz++] = make_pair(w, make_pair(true, 0));
    sort(ev, ev + sz);
    multiset<int> s;
    for (int j = (0); j < (sz - 1); ++j) {
      if (ev[j].second.first)
        s.erase(s.find(ev[j].second.second));
      else
        s.insert(ev[j].second.second);
      if (ev[j].first < ev[j + 1].first) {
        upd(ev[j].first, *s.rbegin());
        upd(ev[j + 1].first, -*s.rbegin());
      }
    }
  }
  for (int i = (0); i < (w); ++i) cout << query(i) << " ";
  return 0;
}
