#include <bits/stdc++.h>
using namespace std;
const int MAX = 1e6 + 5;
class ST_MAX {
 public:
  vector<vector<int> > dat;
  int mxlog, n;
  ST_MAX() {}
  void start(int N) {
    n = N;
    mxlog = 32 - __builtin_clz(N);
    dat.resize(mxlog);
    for (int i = 0; i < (mxlog); i++) dat[i].resize(N);
  }
  void set(int p, int v) { dat[0][p] = v; }
  void init() {
    for (int lg = 0; lg < (mxlog - 1); lg++)
      for (int i = 0; i < (n); i++)
        if (i + (1 << lg) < n)
          dat[lg + 1][i] = max(dat[lg][i], dat[lg][i + (1 << lg)]);
        else
          dat[lg + 1][i] = dat[lg][i];
  }
  int get(int l, int r) const {
    r++;
    if (r - l == 0) return 0;
    int id = 31 - __builtin_clz(r - l);
    if (id < 0) return 0;
    return max(dat[id][l], dat[id][r - (1 << id)]);
  }
} st;
int T, W, N, a[MAX];
long long ret[MAX];
int main() {
  scanf("%d%d", &T, &W);
  while (T--) {
    scanf("%d", &N);
    st.start(N);
    for (int i = 0; i < (N); i++) {
      scanf("%d", &a[i]);
      st.set(i, a[i]);
    }
    st.init();
    for (int i = 0; i < W; i++) {
      int lpos = max(i - (W - N), 0), rpos = min(i, N - 1);
      int cur = st.get(lpos, rpos);
      if (cur < 0 && (i >= N || i < W - N)) cur = 0;
      ret[i] += cur;
      if (lpos == 0 && rpos == N - 1 && i >= N && W >= 2 * N + 1)
        i = max(i, W - N - 1);
      ret[i + 1] -= cur;
    }
  }
  for (int i = 0; i < (W); i++) ret[i + 1] += ret[i];
  for (int i = 0; i < (W); i++) printf("%I64d ", ret[i]);
  puts("");
  return 0;
}
