#include <bits/stdc++.h>
using namespace std;
int n;
int cnt[10], s;
int c3, c4, c5;
long long exgcd(long long n, long long m, long long &x, long long &y) {
  if (!m) return x = 1, y = 0, n;
  long long ret = exgcd(m, n % m, y, x);
  return y -= n / m * x, ret;
}
long long g, a3, a5, x, y, _a3, _a5;
const int inf = 0x3f3f3f3f;
struct Range {
  long long l, r;
  Range() {}
  inline Range(long long _l, long long _r) : l(_l), r(_r) {}
  inline Range operator+(const Range &k2) const {
    return Range(max(l, k2.l), min(r, k2.r));
  }
};
long long k3, k4, k5;
long long ans, ak3, ak4, ak5;
Range Solve(long long a, long long b) {
  return a > 0 ? Range(-inf, floor((double)b / a))
               : Range(ceil((double)b / a), inf);
}
void Relax(long long k) {
  k3 = _a3 + k * x, k5 = _a5 + k * y;
  long long t = abs(k3 * c3 - k4 * c4) + abs(k4 * c4 - k5 * c5);
  if (t < ans) ans = t, ak3 = k3, ak4 = k4, ak5 = k5;
}
void Relax(Range R) {
  if (R.l > R.r) return;
  Relax(R.l), Relax(R.r);
}
int main() {
  scanf("%d%d", &n, &s);
  for (int i = 1; i <= n; i++) {
    int x;
    scanf("%d", &x);
    cnt[x]++;
  }
  c3 = cnt[3], c4 = cnt[4], c5 = cnt[5];
  g = exgcd(c3, c5, a3, a5);
  x = c5 / g, y = -c3 / g;
  ans = inf;
  for (k4 = 0;; k4++) {
    if (k4 * c4 >= s) break;
    long long _s = s - k4 * c4;
    if (_s % g) continue;
    long long t = _s / g;
    _a3 = a3 * t, _a5 = a5 * t;
    Range R = Solve(-x, _a3) + Solve(x, k4 - _a3) + Solve(-y, -(k4 - _a5));
    Relax(R + Solve(c3 * x, c4 * k4 - c3 * _a3) +
          Solve(c5 * y, c4 * k4 - c5 * _a5));
    Relax(R + Solve(-c3 * x, -(c4 * k4 - c3 * _a3)) +
          Solve(c5 * y, c4 * k4 - c5 * _a5));
    Relax(R + Solve(c3 * x, c4 * k4 - c3 * _a3) +
          Solve(-c5 * y, -(c4 * k4 - c5 * _a5)));
    Relax(R + Solve(-c3 * x, -(c4 * k4 - c3 * _a3)) +
          Solve(-c5 * y, -(c4 * k4 - c5 * _a5)));
  }
  if (ans == inf)
    puts("-1");
  else
    printf("%I64d %I64d %I64d\n", ak3, ak4, ak5);
  return 0;
}
