#include <bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f;
const double eps = 1e-5;
template <class T>
inline void getin(T& num) {
  char c;
  bool flag = 0;
  num = 0;
  while ((c = getchar()) < '0' || c > '9')
    if (c == '-') flag = 1;
  while (c >= '0' && c <= '9') {
    num = num * 10 + c - 48;
    c = getchar();
  }
  if (flag) num = -num;
}
int n, sum, a, b, c, v;
int gcd(int a, int b) { return b ? gcd(b, a % b) : a; }
void exgcd(int a, int b, int& x, int& y) {
  if (!b)
    x = 1, y = 0;
  else
    exgcd(b, a % b, y, x), y -= a / b * x;
}
inline int Abs(int x) { return x >= 0 ? x : -x; }
inline double Abs(double x) { return x >= 0 ? x : -x; }
int cal(int x, int y, int z) {
  if (x < 0 || x > y || z < y) return inf;
  return Abs(a * x - b * y) + Abs(b * y - c * z);
}
double cal(double x, double y, double z) {
  if (x < 0 || x > y || z < y) return inf;
  return Abs(a * x - b * y) + Abs(b * y - c * z);
}
inline int divi(double l, double r, int x0, int z0, int y, int a, int c) {
  while (r - l > eps) {
    double mid1 = (2 * l + r) / 3;
    double mid2 = (l + 2 * r) / 3;
    double x1 = x0 + mid1 * c, z1 = z0 - mid1 * a;
    double x2 = x0 + mid2 * c, z2 = z0 - mid2 * a;
    if (x1 < 0) {
      l = mid1;
      continue;
    }
    if (x1 > y) {
      r = mid1;
      continue;
    }
    if (z1 < y) {
      r = mid1;
      continue;
    }
    if (x2 > y) {
      r = mid2;
      continue;
    }
    if (z2 < y) {
      r = mid2;
      continue;
    }
    if (cal(x1, 1.0 * y, z1) < cal(x2, 1.0 * y, z2))
      r = mid2;
    else
      l = mid1;
  }
  int v = (int)((l + r) / 2 + 0.1);
  int X = -inf, Z = inf, V = v;
  for (int i = -3; i <= 3; i++) {
    int x = x0 + (v + i) * c, z = z0 - (v + i) * a;
    if (x < 0 || x > y || z < y) continue;
    if (cal(x, y, z) < cal(X, y, Z)) X = x, Z = z, V = v + i;
  }
  return V;
}
int main() {
  getin(n), getin(sum);
  for (int i = 1; i <= n; i++) {
    getin(v);
    switch (v) {
      case 3:
        a++;
        break;
      case 4:
        b++;
        break;
      default:
        c++;
        break;
    }
  }
  int ans = inf, ansx = inf, ansy = inf, ansz = inf;
  int g = gcd(a, c);
  for (int x, y = 0, z; b * y <= sum; y++) {
    int s = sum - b * y;
    if (s % g) continue;
    s /= g;
    exgcd(a / g, c / g, x, z);
    x *= s, z *= s;
    int k = divi(-inf, inf, x, z, y, a / g, c / g);
    x = x + k * c / g, z = z - k * a / g;
    if (x < 0 || x > y || z < y) continue;
    if (ans > cal(x, y, z)) {
      ans = cal(x, y, z);
      ansx = x, ansy = y, ansz = z;
    }
    if (ans == cal(x, y, z)) {
      if (x < ansx)
        ansx = x, ansy = y, ansz = z;
      else if (x == ansx) {
        if (y < ansy)
          ansx = x, ansy = y, ansz = z;
        else if (y == ansy)
          ansz = min(ansz, z);
      }
    }
  }
  if (ans == inf) puts("-1"), exit(0);
  printf("%d %d %d\n", ansx, ansy, ansz);
}
