#include <bits/stdc++.h>
using namespace std;
int INF = 999999999;
double EPSILON = 0.00000001;
int k1, s;
int c1, c2, c3;
int f(int k2) {
  int v = c1 * k1;
  int w = c2 * k2;
  int k3 = (s - v - w) / c3;
  return fabs(v - w) + fabs(c3 * k3 - w);
}
int solve(int l, int r) {
  if (l == r)
    return l;
  else if (r == l + 1) {
    if (f(l) < f(r))
      return l;
    else
      return r;
  }
  int d = r - l;
  int a = f(l + d / 3);
  int b = f(l + 2 * d / 3);
  if (a > b)
    return solve(l + d / 3 + 1, r);
  else if (a < b)
    return solve(l, l + 2 * d / 3 - 1);
  else
    return solve(l + d / 3, l + 2 * d / 3);
}
int main() {
  int n;
  cin >> n >> s;
  c1 = 0, c2 = 0, c3 = 0;
  for (int i = 0; i < n; i++) {
    int z;
    scanf("%d", &z);
    if (z == 3)
      c1++;
    else if (z == 4)
      c2++;
    else if (z == 5)
      c3++;
  }
  int best = INF;
  int ans1, ans2, ans3;
  for (k1 = 0; k1 <= s / (c1 + c2 + c3); k1++) {
    int k2 = solve(k1, (s - k1 * c1) / (c2 + c3));
    int temp = k2;
    int c3k3 = s - c1 * k1 - c2 * k2;
    if (c3k3 < 0) continue;
    while (k2 > k1 and c3k3 % c3 != 0) {
      k2--;
      c3k3 += c2;
    }
    if (c3k3 >= 0 and c3k3 % c3 == 0) {
      int k3 = c3k3 / c3;
      int f = fabs(c1 * k1 - c2 * k2) + fabs(c2 * k2 - c3 * k3);
      if (k3 >= k2 and f < best) {
        best = f;
        ans1 = k1;
        ans2 = k2;
        ans3 = k3;
      }
    }
    k2 = temp;
    c3k3 = s - c1 * k1 - c2 * k2;
    if (c3k3 < 0) continue;
    while (c3k3 / c3 >= k2 and c3k3 % c3 != 0) {
      k2++;
      c3k3 -= c2;
    }
    if (c3k3 >= 0 and c3k3 % c3 == 0) {
      int k3 = c3k3 / c3;
      int f = fabs(c1 * k1 - c2 * k2) + fabs(c2 * k2 - c3 * k3);
      if (k3 >= k2 and f < best) {
        best = f;
        ans1 = k1;
        ans2 = k2;
        ans3 = k3;
      }
    }
  }
  if (best == INF)
    cout << "-1\n";
  else
    cout << ans1 << " " << ans2 << " " << ans3 << "\n";
  return 0;
}
