func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 3e5 + 10, LEN = 5e3 + 10, S = 51, INF = 1e18;   long long f[N], l[N], r[N], sum[N];   long long lq[S], rq[S], sq[S], mq[S];   long long a[LEN], sx[LEN], mx[LEN];   int n, m;   int main() {     scanf( %d%d , &n, &m);     memset(mq, -0x3f, sizeof mq);     for (int i = 1, s; i <= n; i++) {       scanf( %d , &s);       for (int j = 1; j <= s; j++) scanf( %lld , &a[j]);       for (int j = 1; j <= s; j++) sx[j] = sx[j - 1] + a[j];       for (int j = 1; j <= s; j++) {         mx[j] = max(mx[j - 1] + a[j], a[j]);         mq[i] = max(mq[i], mx[j]);       }       lq[i] = a[1];       for (int j = 2; j <= s; j++) lq[i] = max(lq[i], sx[j]);       rq[i] = a[n];       for (int j = s - 2; j >= 0; j--) rq[i] = max(rq[i], sx[s] - sx[j]);       sq[i] = sx[s];     }     long long res = -INF;     for (int i = 1, x; i <= m; i++) {       scanf( %d , &x);       l[i] = lq[x];       r[i] = rq[x];       sum[i] = sum[i - 1] + sq[x];       res = max(res, mq[x]);     }     f[1] = l[1];     long long maxv = r[1] - sum[1], ans = f[1];     for (int i = 2; i <= m; i++) {       f[i] = sum[i - 1] + l[i] + maxv;       maxv = max(maxv, r[i] - sum[i]);       ans = max(ans, f[i]);     }     printf( %lld n , max(ans, res));     return 0;   }   