#include using namespace std; typedef pair pii; typedef long long ll; const int N = 2000010, MOD = 1e9 + 7, INF = 0x3f3f3f3f; int n, m, w[N]; struct Node { int l, r; }; inline ll g(int l, int r) { return l > r ? 0 : (ll)(r - l + 1) * (r - l + 1); } ll f[N][2]; int main() { scanf("%d", &n); vector a = {{0, -1}}, b = {{-INF, -INF - 1}}; int l = 1, r; for (int i = 1, x; i < n + 1; i++) { scanf("%d", &x); if ((i & 1) && x) a.push_back({l, l + x - 1}); l += x; } l = 1; scanf("%d", &m); for (int i = 1, x; i < m + 1; i++) { scanf("%d", &x); if ((i & 1) && x) b.push_back({l, l + x - 1}); l += x; } for (int i = 1; i < a.size(); i++) f[0][0] += g(a[i].l, a[i].r); a.push_back({INF + 1, INF}); l = r = 0; vector c = {{-INF, -INF - 1}}; for (int i = 1; i < b.size(); i++) { while (l < a.size() - 1 && a[l + 1].l < b[i].l) l++; while (a[r].r <= b[i].r) r++; if (l != r) c.push_back(b[i]); } swap(c, b); l = r = 0; for (int i = 1; i < b.size(); i++) { while (l < a.size() - 1 && a[l + 1].l < b[i].l) l++; while (a[r].r <= b[i].r) r++; ll c = 0; for (int j = l + 1; j < r; j++) c += g(a[j].l, a[j].r); ll v = g(max(b[i].l, a[l].r + 1), min(b[i].r, a[r].l - 1)) - c, vl = g(b[i].l, min(b[i].r, a[r].l - 1)) - c, \ vr = g(max(b[i].l, a[l].r + 1), b[i].r) - c, vlr = g(b[i].l, b[i].r) - c, \ c2 = -g(a[r].l, a[r].r) + g(max(b[i].r + 1, a[r].l), a[r].r); f[i][0] = max(f[i - 1][1], f[i - 1][0]) + v; f[i][0] = max(f[i][0], f[i - 1][0] + vl - g(a[l].l, a[l].r) + g(a[l].l, min(a[l].r, b[i].l - 1))); f[i][0] = max(f[i][0], f[i - 1][1] + vl - g(max(b[i - 1].r + 1, a[l].l), a[l].r) + g(max(b[i - 1].r + 1, a[l].l), min(a[l].r, b[i].l - 1))); f[i][1] = max(f[i - 1][0], f[i - 1][1]) + vr + c2; f[i][1] = max(f[i][1], f[i - 1][0] + vlr + c2 - g(a[l].l, a[l].r) + g(a[l].l, min(a[l].r, b[i].l - 1))); f[i][1] = max(f[i][1], f[i - 1][1] + vlr + c2 - g(max(b[i - 1].r + 1, a[l].l), a[l].r) + g(max(b[i - 1].r + 1, a[l].l), min(a[l].r, b[i].l - 1))); } printf("%lld\n", max(f[b.size() - 1][0], f[b.size() - 1][1])); return 0; }