func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 200010;   int n, a[7], cnt[7], t[N];   void GetData() {     int i;     scanf( %d , &n);     for (i = 0; i < 3; ++i) scanf( %d , &a[i]);     for (i = 0; i < n; ++i) scanf( %d , &t[i]);   }   void Solve() {     int i, j, ans, mn;     bool flag = false;     sort(a, a + 3);     sort(t, t + n);     a[3] = a[0] + a[1];     a[4] = a[0] + a[2];     a[5] = a[1] + a[2];     a[6] = a[3] + a[2];     if (t[n - 1] > a[6])       ans = -1, mn = 0;     else {       if (a[2] > a[3]) {         swap(a[2], a[3]);         flag = true;       }       memset(cnt, 0, sizeof(cnt));       for (i = 0; i < n; ++i) {         for (j = 0; j < 7; ++j) {           if (a[j] >= t[i]) {             cnt[j]++;             break;           }         }       }       ans = cnt[6];       for (; cnt[5] > 0; ++ans) {         cnt[5]--;         if (cnt[0] > 0) cnt[0]--;       }       for (; cnt[4] > 0; ++ans) {         cnt[4]--;         if (cnt[1] > 0)           cnt[1]--;         else if (cnt[0] > 0)           cnt[0]--;       }       if (flag) {         for (; cnt[3] > 0; ++ans) {           cnt[3]--;           if (cnt[0] > 0 && cnt[1] > 0) {             cnt[0]--;             cnt[1]--;           } else if (cnt[0] > 0) {             if (cnt[0] > 1)               cnt[0] -= 2;             else if (cnt[2] > 0)               cnt[2]--;             else               cnt[0]--;           } else if (cnt[1] > 0) {             if (cnt[2] > 0)               cnt[2]--;             else               cnt[1]--;           } else if (cnt[2] > 0)             cnt[2]--;         }       } else {         for (; cnt[3] > 0; ++ans) {           cnt[3]--;           if (cnt[2] > 0)             cnt[2]--;           else if (cnt[1] > 0)             cnt[1]--;           else if (cnt[0] > 0)             cnt[0]--;         }       }       mn = n;       for (i = 0; i <= cnt[2]; ++i) {         int a, b, c, tmp = i;         a = cnt[0];         b = cnt[1];         c = cnt[2];         c -= i;         if (c >= i)           c -= i;         else if (b >= i - c)           b -= i - c, c = 0;         else {           if (a >= i - c - b)             a -= i - c - b;           else             a = 0;           b = c = 0;         }         if (c > 0) {           if (b < c)             a = max(0, a - c - c + b);           else             a = max(0, a - c);           b = max(0, b - c);           tmp += c;         }         if (b >= a * 2)           tmp += (b + 1) / 2;         else           tmp += (a + b + 2) / 3;         mn = min(mn, tmp);       }     }     printf( %d n , ans + mn);   }   int main() {     GetData();     Solve();     return 0;   }   