#include <bits/stdc++.h>
const int INF = 0x3f3f3f3f;
const long long int INFLL = 0x7f3f3f3f3f3f3f3fll;
long long int getint() {
  long long int ret = 0;
  bool f = 0;
  char c;
  while ((c = getchar()) < '0' || c > '9')
    if (c == '-') f ^= 1;
  while (c >= '0' && c <= '9') {
    ret = ret * 10 + c - '0';
    c = getchar();
  }
  return f ? -ret : ret;
}
using namespace std;
int exgcd(int a, int b, int &x, int &y) {
  if (a > b) return exgcd(b, a, y, x);
  if (!a) {
    y = 1;
    x = 0;
    return b;
  }
  int ret = exgcd(b % a, a, y, x);
  x -= (b / a) * y;
  return ret;
}
int div1(int a, int b) {
  if (a >= 0)
    return a / b;
  else
    return -((-a + b - 1) / b);
}
int main() {
  int n = getint(), m = getint();
  int c1 = 0, c2 = 0, c3 = 0;
  for (int i = 1; i <= n; ++i) {
    int t = getint();
    if (t == 3) ++c1;
    if (t == 4) ++c2;
    if (t == 5) ++c3;
  }
  int ans = INF;
  int w1, w2, w3;
  for (int i = 0; c2 * i <= m; ++i) {
    int rm = m - c2 * i, tmp = c2 * i;
    int x, y;
    int g = exgcd(c1, c3, x, y);
    if (rm % g) continue;
    x *= rm / g, y *= rm / g;
    int t = min(div1(min(i, tmp / c1) - x, c3 / g),
                div1(y - max(i, (tmp + c3 - 1) / c3), c1 / g));
    x += t * c3 / g;
    y -= t * c1 / g;
    int ret = abs(x * c1 - tmp) + abs(y * c3 - tmp);
    if (x >= 0 && ans > ret) {
      ans = ret;
      w1 = x;
      w2 = i;
      w3 = y;
    }
    x += c3 / g;
    y -= c1 / g;
    ret = abs(x * c1 - tmp) + abs(y * c3 - tmp);
    if (x >= 0 && x <= i && i <= y && ans > ret) {
      ans = ret;
      w1 = x;
      w2 = i;
      w3 = y;
    }
  }
  if (ans == INF)
    printf("-1\n");
  else
    printf("%d %d %d\n", w1, w2, w3);
}
