#include <bits/stdc++.h>
using namespace std;
template <typename S, typename T>
struct SparseTable {
  S n, k;
  vector<vector<T>> table;
  SparseTable(S size = 1e6) {
    n = size;
    k = (S)(log2(n)) + 1;
    table.assign(k, vector<T>(n));
  }
  inline T func(T a, T b) { return max(a, b); }
  void build(vector<T> &arr) {
    for (S i = 0; i < n; i++) table[0][i] = arr[i];
    for (S j = 1; j <= k; j++) {
      for (S i = 0; i + (1 << j) <= n; i++) {
        table[j][i] = func(table[j - 1][i], table[j - 1][i + (1 << (j - 1))]);
      }
    }
  }
  T queryConst(S left, S right) {
    S length = (right - left + 1);
    S K = (S)(log2(length));
    return func(table[K][left], table[K][right + 1 - (1 << K)]);
  }
};
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  long long n, w;
  cin >> n >> w;
  vector<long long> ans(w + 1, 0);
  for (long long i = 0; i < n; i++) {
    long long len, L = -1;
    cin >> len;
    vector<long long> arr(len);
    for (long long j = 0; j < len; j++) {
      cin >> arr[j];
    }
    SparseTable<long long, long long> st(len);
    st.build(arr);
    for (long long j = 0; j < len; j++) {
      long long low = j, high = w - len + j, mid, res = -1;
      low = max(low, L + 1);
      while (low <= high) {
        mid = (low + high) / 2;
        long long query;
        if (mid < len)
          query = st.queryConst(j, mid);
        else
          query = st.queryConst(j, len - 1);
        if (query == arr[j]) {
          res = mid;
          low = mid + 1;
        } else
          high = mid - 1;
      }
      if (res != -1) {
        if ((arr[j] < 0) && (len < w)) {
          long long a = 0, b = w - len - 1, c = w - 1 - (w - len - 1),
                    d = w - 1;
          if (c <= b + 1) {
            ans[L + 1] -= arr[j];
            ans[res + 1] += arr[j];
          } else {
            long long low = max(a, L + 1), high = min(b, res);
            if (low <= high) {
              ans[low] -= arr[j], ans[high + 1] += arr[j];
            }
            low = max(c, L + 1), high = min(d, res);
            if (low <= high) {
              ans[low] -= arr[j], ans[high + 1] += arr[j];
            }
          }
        }
        ans[L + 1] += arr[j];
        ans[res + 1] -= arr[j];
        L = res;
      }
    }
  }
  for (long long i = 1; i < w; i++) {
    ans[i] += ans[i - 1];
  }
  for (long long i = 0; i < w; i++) cout << ans[i] << " ";
  cout << '\n';
  return 0;
}
