#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9;
inline int gcd(int a, int b, int& x, int& y) {
  if (a == 0) {
    x = 0;
    y = 1;
    return b;
  }
  int xs, ys, d = gcd(b % a, a, xs, ys);
  x = ys - b / a * xs;
  y = xs;
  return d;
}
int n, c[6], second;
inline int first(int x0, int y0, int a, int b, int g, int i, int& k3, int k4,
                 int& k5) {
  k3 = x0 + 1LL * i * b / g;
  k5 = y0 - 1LL * i * a / g;
  if (0 <= k3 && k3 <= k4 && k4 <= k5)
    return fabs(c[3] * k3 - c[4] * k4) + fabs(c[5] * k5 - c[4] * k4);
  return INF;
}
inline int FAnySol(int a, int b, int c, int& k3, int k4, int& k5) {
  int x0, y0, g = gcd(a, b, x0, y0);
  if (c % g) {
    k3 = k5 = -1;
    return INF;
  }
  x0 *= c / g;
  y0 *= c / g;
  int l = ceil(-1LL * g * x0 * 1.0 / b);
  int r = min((int)floor(1LL * g * (k4 - x0) * 1.0 / b),
              (int)floor(-1LL * g * (k4 - y0) * 1.0 / a)),
      m1, m2;
  while (r - l >= 3) {
    m1 = (2 * l + r) / 3;
    m2 = (l + 2 * r) / 3;
    if (first(x0, y0, a, b, g, m1, k3, k4, k5) >
        first(x0, y0, a, b, g, m2, k3, k4, k5))
      l = m1;
    else
      r = m2;
  }
  int mn = INF, tk3, tk5;
  for (int i = l; i <= r; i++) {
    int t = first(x0, y0, a, b, g, i, tk3, k4, tk5);
    if (t < mn) {
      mn = t;
      k3 = tk3;
      k5 = tk5;
    }
  }
  return mn;
}
int main() {
  cin >> n >> second;
  for (int i = 0; i < n; i++) {
    int x;
    cin >> x;
    c[x]++;
  }
  int ansk3 = -1, ansk4 = -1, ansk5 = -1, fMinValue = INF;
  for (int k4 = 0; k4 * c[4] <= second; k4++) {
    int tk3, tk5;
    int t = FAnySol(c[3], c[5], second - c[4] * k4, tk3, k4, tk5);
    if (t < fMinValue) {
      fMinValue = t;
      ansk3 = tk3;
      ansk4 = k4;
      ansk5 = tk5;
    }
  }
  if (ansk3 == -1)
    cout << -1;
  else
    cout << ansk3 << " " << ansk4 << " " << ansk5 << endl;
  return 0;
}
