func_code_string: #include <bits/stdc++.h>   using namespace std;   const int MX = 1e6 + 5;   long long ans[MX];   long long upd[MX];   int main() {     ios_base::sync_with_stdio(false);     cin.tie(0);     int n, w;     cin >> n >> w;     vector<int> a[n];     int mx[n];     for (int i = 0; i < n; i++) {       int l;       cin >> l;       a[i] = vector<int>(l);       mx[i] = -1000000000;       for (int j = 0; j < l; j++) {         cin >> a[i][j];         mx[i] = max(mx[i], a[i][j]);       }     }     memset(ans, 0, sizeof(ans));     for (int i = 0; i < n; i++) {       if (w >= 2 * a[i].size() + 1) {         int currmx = 0;         for (int j = 0; j < a[i].size(); j++) {           currmx = max(currmx, a[i][j]);           ans[j + 1] += currmx;         }         currmx = 0;         for (int j = a[i].size() - 1; j >= 0; j--) {           currmx = max(currmx, a[i][j]);           ans[w - ((a[i].size() - 1) - j)] += currmx;         }         upd[a[i].size()] -= max(mx[i], 0);         upd[w - a[i].size()] += max(mx[i], 0);       } else {         deque<int> q;         int idx = 0;         bool zero = false;         for (int j = 1; j <= w; j++) {           if (idx < a[i].size()) {             while (!q.empty() && a[i][q.back()] <= a[i][idx]) {               q.pop_back();             }             q.push_back(idx++);           }           zero = (a[i].size() <= (j - 1)) || (a[i].size() <= (w - j));           if (zero)             ans[j] += max(a[i][q.front()], 0);           else             ans[j] += a[i][q.front()];           if (((a[i].size() - q.front()) + j) >= w + 1) {             q.pop_front();           }         }       }     }     for (int i = w; i >= 1; i--) {       upd[i] += upd[i + 1];     }     for (int i = 1; i <= w; i++) cout << ans[i] + upd[i] <<   n ;   }   