#include <bits/stdc++.h>
using namespace std;
template <typename T, class F = function<T(const T &, const T &)>>
struct Sparse_table {
  int n;
  vector<vector<T>> table;
  F func;
  Sparse_table(const vector<T> &arr, const F &f)
      : func(f), n(int((arr).size())) {
    int max_log = 32 - __builtin_clz(n);
    table.resize(max_log);
    table[0] = arr;
    for (int j = 1; j < max_log; j++) {
      table[j].resize(n - (1 << j) + 1);
      for (int i = 0; i < n - (1 << j) + 1; i++) {
        table[j][i] = func(table[j - 1][i], table[j - 1][i + (1 << (j - 1))]);
      }
    }
  }
  T get(int l, int r) {
    assert(0 <= l && l <= r && r <= n - 1);
    int lg = 32 - __builtin_clz(r - l + 1) - 1;
    return func(table[lg][l], table[lg][r - (1 << lg) + 1]);
  }
};
int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  int cnt, w;
  cin >> cnt >> w;
  vector<long long> ans(w + 1);
  while (cnt--) {
    int n;
    cin >> n;
    vector<int> a(n);
    for (int &i : a) {
      cin >> i;
    }
    Sparse_table<int> st(a, [&](int i, int j) { return max(i, j); });
    for (int i = 0; i < w; ++i) {
      int l = max(i - (w - n), 0);
      int r = min(i, n - 1);
      int cur = st.get(l, r);
      if (cur < 0 && (i >= n || i < (w - n))) {
        cur = 0;
      }
      ans[i] += cur;
      if (l == 0 && r == n - 1 && w >= 2 * n + 1) {
        i = max(i, w - n - 1);
      }
      ans[i + 1] -= cur;
    }
  }
  for (int i = 0; i < w; ++i) {
    cout << ans[i] << ' ';
    ans[i + 1] += ans[i];
  }
  cout << endl;
}
