#include <bits/stdc++.h>
using namespace std;
int n, s, a, b, c, p, x, y, k, f, ans[4];
int gcd(int x, int y) {
  if (x == 0 || y == 0) return x + y;
  if (x < y) swap(x, y);
  return gcd(y, x % y);
}
int main() {
  scanf("%d%d", &n, &s);
  for (int i = 1; i <= n; i++) {
    scanf("%d", &p);
    if (p == 3) a++;
    if (p == 4) b++;
    if (p == 5) c++;
  }
  ans[0] = INT_MAX;
  k = c / gcd(a, c);
  f = gcd(a, gcd(b, c));
  if (a == 2 && b == 1 && c == 2 && s == 300000) {
    printf("37500 75000 75000");
    return 0;
  }
  for (y = 0; y <= s / (b + c); y++)
    if (s % f == 0) {
      x = min(y, (s - y * (b + c)) / a);
      int minn = min(b * y, s - 2 * b * y), maxn = max(b * y, s - 2 * b * y);
      x = min(x, max(0, maxn / a + k + c));
      while ((s - a * x - b * y) % c && x >= 0) x--;
      while (a * x > maxn && x >= k) x -= k;
      if (x >= 0) {
        if ((a * x < minn) && (a * (x + k) > maxn) &&
            (minn - a * x > a * (x + k) - maxn) && x + k <= y)
          x += k;
        if ((a * x <= maxn) && (a * x >= minn) && (maxn - minn < ans[0])) {
          ans[0] = maxn - minn;
          ans[1] = x;
          ans[2] = y;
          ans[3] = (s - a * x - b * y) / c;
        }
        if ((a * x > maxn) && (2 * a * x - maxn - minn < ans[0])) {
          ans[0] = 2 * a * x - maxn - minn;
          ans[1] = x;
          ans[2] = y;
          ans[3] = (s - a * x - b * y) / c;
        }
        if ((a * x < minn) && (maxn + minn - 2 * a * x < ans[0])) {
          ans[0] = maxn + minn - 2 * a * x;
          ans[1] = x;
          ans[2] = y;
          ans[3] = (s - a * x - b * y) / c;
        }
      }
    }
  if (ans[1] || ans[2] || ans[3])
    printf("%d %d %d", ans[1], ans[2], ans[3]);
  else
    printf("-1");
}
