func_code_string: #include <bits/stdc++.h>   using namespace std;   int Get() {     char c;     while (c = getchar(), c <  0  || c >  9 )       ;     int X = 0;     while (c >=  0  && c <=  9 ) {       X = X * 10 + c - 48;       c = getchar();     }     return X;   }   const int inf = 1000000000;   int GCD(int a, int b) { return b ? GCD(b, a % b) : a; }   int Solve(int a, int b, int c) {     return a ? ((c - b * Solve(b % a, a, c % a)) / a) : 0;   }   int GetMin(int L, int R, int a, int b, int c) {     if (L > R) return -1;     int K = GCD(a, b);     if (c % K) return -1;     a /= K;     b /= K;     c /= K;     int X = Solve(a, b, c);     if (X < L) X += ((L - X - 1) / b + 1) * b;     if (X > L) X -= (X - L) / b * b;     return (X <= R) ? X : -1;   }   int GetMax(int L, int R, int a, int b, int c) {     if (L > R) return -1;     int K = GCD(a, b);     if (c % K) return -1;     a /= K;     b /= K;     c /= K;     int X = Solve(a, b, c);     if (X > R) X -= ((X - R - 1) / b + 1) * b;     if (X < R) X += (R - X) / b * b;     return (X >= L) ? X : -1;   }   int main() {     int N = Get(), S = Get(), a = 0, b = 0, c = 0;     while (N--) {       int X = Get();       if (X == 3) a++;       if (X == 4) b++;       if (X == 5) c++;     }     int Ans = inf, Ans_x, Ans_y;     for (int y = 0; b * y <= S; y++) {       int B = b * y, _S = S - B, Max = min(y, (_S - c * y) / a), x;       x = GetMin((_S - B - 1) / a + 1, min(Max, B / a), a, c, _S);       if (x != -1 && 2 * B - _S < Ans) {         Ans = 2 * B - _S;         Ans_x = x;         Ans_y = y;       }       x = GetMax(0, min(Max, min(B, _S - B) / a), a, c, _S);       if (x != -1 && _S - 2 * a * x < Ans) {         Ans = _S - 2 * a * x;         Ans_x = x;         Ans_y = y;       }       x = GetMin((max(B, _S - B) - 1) / a + 1, Max, a, c, _S);       if (x != -1 && 2 * a * x - _S < Ans) {         Ans = 2 * a * x - _S;         Ans_x = x;         Ans_y = y;       }       x = GetMin((B - 1) / a + 1, min(Max, (_S - B) / a), a, c, _S);       if (x != -1 && _S - 2 * B < Ans) {         Ans = _S - 2 * B;         Ans_x = x;         Ans_y = y;       }     }     if (Ans == inf)       printf( -1 n );     else       printf( %d %d %d n , Ans_x, Ans_y, (S - a * Ans_x - b * Ans_y) / c);     return 0;   }   