#include <bits/stdc++.h>
using namespace std;
void Fast_IO() {
  ios::sync_with_stdio(0);
  cin.tie(0);
}
class sparseTable {
 public:
  long long n, k = 25;
  vector<vector<long long> > st;
  long long init() { return -1000000000; }
  long long compute(long long a, long long b) { return max(a, b); }
  sparseTable(vector<long long> a, long long N) {
    st.clear();
    n = N;
    st.resize(n);
    for (long long i = (long long)0; i <= (long long)n - 1; i++)
      st[i].resize(k + 1), st[i][0] = a[i];
    for (long long j = (long long)1; j <= (long long)k; j++)
      for (long long i = (long long)0; i <= (long long)n - (1 << j); i++)
        st[i][j] = compute(st[i][j - 1], st[i + (1 << (j - 1))][j - 1]);
  }
  long long rq(long long left, long long right) {
    long long result = init();
    for (long long j = (long long)k; j >= (long long)0; j--)
      if ((1 << j) <= right - left + 1)
        result = compute(result, st[left][j]), left += (1 << j);
    return result;
  }
};
int main() {
  Fast_IO();
  long long N, w;
  cin >> N >> w;
  vector<vector<long long> > adj(N);
  for (long long i = (long long)0; i <= (long long)N - 1; i++) {
    long long Li;
    cin >> Li;
    while (Li--) {
      long long x;
      cin >> x;
      adj[i].push_back(x);
    }
  }
  long long ans[w + 1];
  for (long long i = (long long)0; i <= (long long)w; i++) ans[i] = 0;
  for (auto v : adj) {
    long long n = (long long)int(v.size());
    sparseTable st(v, n);
    if (n <= w - 1 - n) {
      long long maxi = st.rq(0, n - 1);
      maxi = max(maxi, 0LL);
      ans[n] += maxi;
      ans[w - n] -= maxi;
    }
    for (long long i = (long long)0; i <= (long long)n - 1; i++) {
      long long l = 0, r = i;
      long long l2 = 0, r2 = n - 1;
      if (i >= w - n) l2 = max(l2, i - w + n);
      l = max(l, l2);
      r = min(r, r2);
      if (l <= r) {
        long long range = st.rq(l, r);
        if (i < w - n) range = max(range, 0LL);
        ans[i] += range;
        ans[i + 1] -= range;
      }
    }
    for (long long i = (long long)0; i <= (long long)n - 1; i++) {
      if (w - 1 - i <= n - 1) continue;
      long long r = n - 1, l = n - 1 - i;
      if (l <= r) {
        long long range = st.rq(l, r);
        if (w - 1 - i > n - 1) range = max(range, 0LL);
        ans[w - 1 - i] += range;
        ans[w - i] -= range;
      }
    }
  }
  for (long long i = (long long)1; i <= (long long)w; i++) ans[i] += ans[i - 1];
  for (long long i = (long long)0; i <= (long long)w - 1; i++)
    cout << ans[i] << " ";
  return 0;
}
