#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:16777216")
#pragma warning(default : 4)
void dbg() { std::cerr << '\n'; };
template <typename T1>
void dbg(T1 x1) {
  std::cerr << x1 << '\n';
};
template <typename T1, typename T2>
void dbg(T1 x1, T2 x2) {
  std::cerr << x1 << " " << x2 << '\n';
};
template <typename T1, typename T2, typename T3>
void dbg(T1 x1, T2 x2, T3 x3) {
  std::cerr << x1 << " " << x2 << " " << x3 << '\n';
};
const double PI = acos(-1.);
long long Round(double x) { return x < 0 ? x - .5 : x + .5; };
using namespace std;
int n, s, c3, c4, c5, K3, K5, A, B, L, R, z;
int u[400], TM;
int bst;
void cl(int x, bool tr) {
  x = max(x, L);
  x = min(x, R / c3);
  int md = (s - c3 * x - c4 * z) % c5;
  if (md < 0) md += c5;
  TM++;
  while (md && u[md] != TM) {
    u[md] = TM;
    if (tr) {
      x++;
      md -= c3;
      while (md < 0) md += c5;
    } else {
      x--;
      md += c3;
      while (md >= c5) md -= c5;
    }
  }
  if (md || x * c3 > R || x < L) return;
  int t = abs(c3 * x - A) + abs(c3 * x - B);
  if (t < bst) {
    bst = t;
    K3 = x;
    K5 = (s - c3 * x - c4 * z) / c5;
  }
}
int go(int K4) {
  L = 0, R = min(K4 * c3, s - c4 * K4 - c5 * K4);
  A = c4 * K4, B = s - A - A;
  bst = 0x3F3F3F3F;
  z = K4;
  cl(A / c3, 0);
  cl((A - 1) / c3 + 1, 1);
  cl(B / c3, 0);
  cl((B - 1) / c3 + 1, 1);
  return bst;
}
int R1, R2;
void brute() {
  int k3, k4, k5;
  int bst = 0x3F3F3F3F;
  int r3, r4, r5;
  for (k3 = 0; k3 <= s; k3++)
    for (k4 = k3; k4 <= s; k4++)
      for (k5 = k4; k5 <= s; k5++) {
        if (c3 * k3 + c4 * k4 + c5 * k5 != s) continue;
        int tmp = abs(c3 * k3 - c4 * k4) + abs(c4 * k4 - c5 * k5);
        if (tmp < bst) {
          bst = tmp;
          r3 = k3;
          r4 = k4;
          r5 = k5;
        }
      }
  if (bst == 0x3F3F3F3F) {
    puts("-1");
    return;
  }
  R1 = bst;
  printf("%d %d %d\n", r3, r4, r5);
  dbg(abs(r3 * c3 - r4 * c4) + abs(r4 * c4 - r5 * c5));
}
int main() {
  scanf("%d %d", &n, &s);
  for (int i = 0; i < (int)(n); ++i) {
    int a;
    scanf("%d", &a);
    if (a == 3) c3++;
    if (a == 4) c4++;
    if (a == 5) c5++;
  }
  int k3, k4, k5, bst = 0x3F3F3F3F;
  for (int i = 0; 2 * i <= s; i++) {
    int tmp = go(i);
    if (tmp < bst) {
      bst = tmp;
      k3 = K3;
      k4 = i;
      k5 = K5;
    }
  }
  if (bst == 0x3F3F3F3F) {
    puts("-1");
    return 0;
  }
  printf("%d %d %d\n", k3, k4, k5);
  return 0;
}
