#include <bits/stdc++.h>
using namespace std;
using namespace std;
const int N = 1e6 + 100;
const int inf = 1e9 + 100;
int n, w, m, a[N], seg[N << 2];
long long fen[N];
void change(int dex, int val, int v = 1, int s = 0, int e = N) {
  if (dex < s || e <= dex) {
    return;
  }
  if (e - s == 1) {
    seg[v] = val;
    return;
  }
  int mid = (s + e) >> 1, lc = v << 1, rc = lc | 1;
  change(dex, val, lc, s, mid);
  change(dex, val, rc, mid, e);
  seg[v] = max(seg[lc], seg[rc]);
}
int get_max(int l, int r, int v = 1, int s = 0, int e = N) {
  if (r <= s || e <= l) return -inf;
  if (l <= s && e <= r) return seg[v];
  int mid = (s + e) >> 1, lc = v << 1, rc = lc | 1;
  return max(get_max(l, r, lc, s, mid), get_max(l, r, rc, mid, e));
}
void add(int dex, long long val) {
  for (++dex; dex < N; dex += dex & -dex) fen[dex] += val;
}
long long get(int dex) {
  long long res = 0;
  for (; dex; dex ^= dex & -dex) res += fen[dex];
  return res;
}
void ADD(int l, int r, long long x) {
  add(l, x);
  add(r, -x);
}
void act(int i) {
  ADD(i, i + 1, max(i + m < w || i >= w ? 0 : -inf, get_max(i + m - w, i + 1)));
}
void get_line() {
  int maxi = 0;
  cin >> m;
  for (int i = 0; i < m; i++) {
    cin >> a[i];
    change(i, a[i]);
    maxi = max(maxi, a[i]);
  }
  for (int i = 0; i < m; i++) {
    act(i);
  }
  for (int i = 0; i < m && w - i - 1 >= m; i++) {
    act(w - i - 1);
  }
  if (2 * m < w) {
    ADD(m, w - m, maxi);
  }
  for (int i = 0; i < m; i++) {
    change(i, 0);
  }
}
int main() {
  cin >> n >> w;
  for (int i = 0; i < n; i++) {
    get_line();
  }
  for (int i = 0; i < w; i++) {
    cout << get(i + 1) << ' ';
  }
}
