func_code_string: #include <bits/stdc++.h>   using namespace std;   using namespace std;   const int N = 1e6 + 100;   const int inf = 1e9 + 100;   int n, w, m, a[N], seg[N << 2];   long long fen[N];   void change(int dex, int val, int v = 1, int s = 0, int e = N) {     if (dex < s || e <= dex) {       return;     }     if (e - s == 1) {       seg[v] = val;       return;     }     int mid = (s + e) >> 1, lc = v << 1, rc = lc | 1;     change(dex, val, lc, s, mid);     change(dex, val, rc, mid, e);     seg[v] = max(seg[lc], seg[rc]);   }   int get_max(int l, int r, int v = 1, int s = 0, int e = N) {     if (r <= s || e <= l) return -inf;     if (l <= s && e <= r) return seg[v];     int mid = (s + e) >> 1, lc = v << 1, rc = lc | 1;     return max(get_max(l, r, lc, s, mid), get_max(l, r, rc, mid, e));   }   void add(int dex, long long val) {     for (++dex; dex < N; dex += dex & -dex) fen[dex] += val;   }   long long get(int dex) {     long long res = 0;     for (; dex; dex ^= dex & -dex) res += fen[dex];     return res;   }   void ADD(int l, int r, long long x) {     add(l, x);     add(r, -x);   }   void act(int i) {     ADD(i, i + 1, max(i + m < w || i >= w ? 0 : -inf, get_max(i + m - w, i + 1)));   }   void get_line() {     int maxi = 0;     cin >> m;     for (int i = 0; i < m; i++) {       cin >> a[i];       change(i, a[i]);       maxi = max(maxi, a[i]);     }     for (int i = 0; i < m; i++) {       act(i);     }     for (int i = 0; i < m && w - i - 1 >= m; i++) {       act(w - i - 1);     }     if (2 * m < w) {       ADD(m, w - m, maxi);     }     for (int i = 0; i < m; i++) {       change(i, 0);     }   }   int main() {     cin >> n >> w;     for (int i = 0; i < n; i++) {       get_line();     }     for (int i = 0; i < w; i++) {       cout << get(i + 1) <<    ;     }   }   