#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6 + 10;
const int inf = 1e9;
struct node {
  int first, second, w;
  node(int a = 0, int b = 0, int c = 0) : first(a), second(b), w(c){};
  bool operator<(node a) const {
    if (first == a.first) return second < a.second;
    return first < a.first;
  }
};
pair<int, int> a[maxn];
int n, w;
long long mn[maxn << 2], add[maxn << 2];
set<node> s;
void Add(int x, long long d) { mn[x] += d, add[x] += d; }
void pushdown(int x) {
  if (add[x] != 0) {
    Add((x << 1), add[x]);
    Add(((x << 1) | 1), add[x]);
    add[x] = 0;
  }
}
void modify(int x, int l, int r, int L, int R, long long d) {
  if (L > R) return;
  if (L <= l && R >= r) {
    Add(x, d);
    return;
  }
  int mid = (l + r) >> 1;
  pushdown(x);
  if (L <= mid) modify((x << 1), l, mid, L, R, d);
  if (R > mid) modify(((x << 1) | 1), mid + 1, r, L, R, d);
}
void dfs(int x, int l, int r) {
  if (l == r) {
    printf("%lld ", mn[x]);
    return;
  }
  pushdown(x);
  int mid = (l + r) >> 1;
  dfs((x << 1), l, mid), dfs(((x << 1) | 1), mid + 1, r);
}
void insert(int L, int R, int w) {
  if (L > R) return;
  while (s.size()) {
    auto it = s.lower_bound(node(L, 0, 0));
    if (it == s.end() || (*it).first > R) break;
    if (R >= (*it).second)
      s.erase(it);
    else {
      s.insert(node(R + 1, (*it).second, (*it).w));
      s.erase(it);
      break;
    }
  }
  auto it = s.lower_bound(node(L, inf, inf));
  if (it != s.begin()) {
    --it;
    if ((*it).second >= L) {
      s.insert(node((*it).first, L - 1, (*it).w));
      s.erase(it);
    }
  }
  s.insert(node(L, R, w));
}
int main() {
  scanf("%d %d", &n, &w);
  for (int i = 1; i <= n; i++) {
    int m;
    scanf("%d", &m);
    for (int j = 1; j <= m; j++) scanf("%d", &a[j].first), a[j].second = j;
    sort(a + 1, a + m + 1);
    int flag = 0;
    for (int j = 1; j <= m; j++) {
      if (a[j].first > 0 && !flag) {
        flag = 1;
        insert(1, w - m, 0);
        insert(m + 1, w, 0);
      }
      int L = a[j].second, R = w - m + a[j].second;
      insert(L, R, a[j].first);
    }
    if (!flag) {
      insert(1, w - m, 0);
      insert(m + 1, w, 0);
    }
    for (auto x : s) {
      modify(1, 1, w, x.first, x.second, x.w);
    }
  }
  dfs(1, 1, w);
  puts("");
}
