1610 vector<int64_t> s1(l), s2(m), s3(n);
1611 for(
int i = 0; i < l; i++) {
1614 for(
int i = 0; i < m; i++) {
1617 for(
int i = 0; i < n; i++) {
1620 vector<point> s(l + m + n);
1621 int64_t p1 = 0, p2 = 0, p3 = 0, ps = 0, prev1 = -1, prev2 = -1, prev3 = -1;
1622 while(p1 < l || p2 < m || p3 < n || ps < l + m + n) {
1623 int64_t v1 = p1 < l ? s1[p1] : LONG_LONG_MAX;
1624 int64_t v2 = p2 < m ? s2[p2] : LONG_LONG_MAX;
1625 int64_t v3 = p3 < n ? s3[p3] : LONG_LONG_MAX;
1626 int64_t min_v = min(v1, min(v2, v3));
1628 s[ps++] = {v1, 1, {-1, prev1, prev2, prev3}};
1631 }
else if(min_v == v2) {
1632 s[ps++] = {v2, 2, {-1, prev1, prev2, prev3}};
1636 s[ps++] = {v3, 3, {-1, prev1, prev2, prev3}};
1641 int64_t last1 = l + m + n, last2 = l + m + n, last3 = l + m + n;
1642 int64_t ans = LONG_LONG_MAX;
1643 for(int64_t i = l + m + n - 1; i >= 0; i--) {
1644 if(s[i].group == 1) {
1645 if(last2 != l + m + n && s[i].prev_index[3] != -1) {
1646 ans = min(ans, 2 * (s[last2].value - s[s[i].prev_index[3]].value));
1648 if(last3 != l + m + n && s[i].prev_index[2] != -1) {
1649 ans = min(ans, 2 * (s[last3].value - s[s[i].prev_index[2]].value));
1652 }
else if(s[i].group == 2) {
1653 if(last1 != l + m + n && s[i].prev_index[3] != -1) {
1654 ans = min(ans, 2 * (s[last1].value - s[s[i].prev_index[3]].value));
1656 if(last3 != l + m + n && s[i].prev_index[1] != -1) {
1657 ans = min(ans, 2 * (s[last3].value - s[s[i].prev_index[1]].value));
1661 if(last1 != l + m + n && s[i].prev_index[2] != -1) {
1662 ans = min(ans, 2 * (s[last1].value - s[s[i].prev_index[2]].value));
1664 if(last2 != l + m + n && s[i].prev_index[1] != -1) {
1665 ans = min(ans, 2 * (s[last2].value - s[s[i].prev_index[1]].value));