#include <bits/stdc++.h>
using namespace std;
namespace letemslide {
vector<vector<int> > arr;
int nay, N, n, w;
vector<long long> a, t, lazy;
void build() {
  n = 1;
  while (n < N) n *= 2;
  t = vector<long long>(2 * n, 0);
  lazy = vector<long long>(2 * n, 0);
  for (int i = 0; i < 2 * n; i++) {
    t[i] = 0;
  }
}
void push(int v, int len) {
  t[v] += lazy[v] * len;
  if (v < n) {
    lazy[v * 2] += lazy[v];
    lazy[v * 2 + 1] += lazy[v];
  }
  lazy[v] = 0;
}
long long sum(int v, int tl, int tr, int l, int r) {
  push(v, tr - tl + 1);
  if (l > r) return 0;
  if (l <= tl && tr <= r) return t[v];
  int tm = (tl + tr) / 2;
  return sum(v * 2, tl, tm, l, min(r, tm)) +
         sum(v * 2 + 1, tm + 1, tr, max(l, tm + 1), r);
}
long long sum(int l, int r) { return sum(1, 0, n - 1, l, r); }
void update(int v, int tl, int tr, int pos, int incr) {
  push(v, tr - tl + 1);
  if (tl == tr) {
    lazy[v] += incr;
  } else {
    int tm = (tl + tr) / 2;
    push(v, tr - tl + 1);
    if (pos <= tm)
      update(v * 2, tl, tm, pos, incr);
    else
      update(v * 2 + 1, tm + 1, tr, pos, incr);
    t[v] = t[v * 2] + t[v * 2 + 1];
  }
}
void update(int pos, int incr) { update(1, 0, n - 1, pos, incr); }
static void update(int v, int tl, int tr, int l, int r, long long add) {
  push(v, tr - tl + 1);
  if (l > r) return;
  if (l <= tl && tr <= r) {
    lazy[v] += add;
    push(v, tr - tl + 1);
    return;
  }
  int tm = (tl + tr) / 2;
  update(v * 2, tl, tm, l, min(r, tm), add);
  update(v * 2 + 1, tm + 1, tr, max(l, tm + 1), r, add);
  t[v] = t[v * 2] + t[v * 2 + 1];
}
static void update(int l, int r, long long add) {
  if (add == 0) {
    return;
  }
  update(1, 0, n - 1, l, r, add);
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin >> nay >> w;
  arr.resize(nay);
  a.resize(w);
  N = 0;
  for (int i = 0; i < nay; i++) {
    int l;
    cin >> l;
    N += l;
    arr[i].resize(l);
    for (int j = 0; j < l; j++) {
      cin >> arr[i][j];
    }
  }
  N = w;
  build();
  for (int i = 0; i < nay; i++) {
    int l = arr[i].size();
    if (w <= 2 * l - 1) {
      multiset<long long> stuff;
      for (int j = 0; j < w - l; j++) {
        stuff.insert(-arr[i][j]);
        long long best = -(*stuff.begin());
        best = max(best, 0LL);
        update(j, best);
      }
      stuff.insert(-arr[i][w - l]);
      long long bestie = -(*stuff.begin());
      update(w - l, bestie);
      for (int j = w - l + 1; j < l; j++) {
        stuff.insert(-arr[i][j]);
        stuff.erase(stuff.find(-arr[i][j - w + l - 1]));
        long long best = -(*stuff.begin());
        update(j, best);
      }
      stuff.clear();
      for (int j = w - 1; j >= l; j--) {
        stuff.insert(-arr[i][l + j - w]);
        long long best = -(*stuff.begin());
        best = max(best, 0LL);
        update(j, best);
      }
    } else {
      multiset<long long> stuff;
      for (int j = 0; j < l; j++) {
        stuff.insert(-arr[i][j]);
        long long best = -(*stuff.begin());
        best = max(best, 0LL);
        update(j, best);
      }
      long long bestie = -(*stuff.begin());
      bestie = max(bestie, 0LL);
      update(l, w - l - 1, bestie);
      stuff.clear();
      for (int j = w - 1; j >= w - l; j--) {
        stuff.insert(-arr[i][l + j - w]);
        long long best = -(*stuff.begin());
        best = max(best, 0LL);
        update(j, best);
      }
    }
  }
  for (int i = 0; i < w; i++) {
    cout << sum(i, i) << " ";
  }
  cout << endl;
  return 0;
}
}  // namespace letemslide
int main() {
  letemslide::main();
  return 0;
}
