#include <bits/stdc++.h>
using namespace std;
template <typename T>
bool umax(T &a, const T &b) {
  return b <= a ? false : (a = b, true);
}
template <typename T>
bool umin(T &a, const T &b) {
  return b >= a ? false : (a = b, true);
}
template <typename T>
void V2A(T a[], const vector<T> &b) {
  for (int i = 0; i < b.size(); i++) a[i] = b[i];
}
template <typename T>
void A2V(vector<T> &a, const T b[]) {
  for (int i = 0; i < a.size(); i++) a[i] = b[i];
}
const double PI = acos(-1.0);
const int INF = 1e9 + 7;
long long x, y, z, a, b, c, a0, b0;
long long gcd(long long a, long long b) { return b ? gcd(b, a % b) : a; }
void gcd(long long a, long long b, long long &d, long long &x, long long &y) {
  if (!b) {
    d = a;
    x = 1;
    y = 0;
  } else {
    gcd(b, a % b, d, y, x);
    y -= x * (a / b);
  }
}
long long f(long long k) {
  long long xx = x + k * b0, yy = y - k * a0;
  return abs(xx * a - yy * b) + abs(yy * b - z * c);
}
bool chk(long long k1, long long k2) {
  if (x + k1 * b0 < 0) return false;
  if (x + k1 * b0 > z) return true;
  if (y - k1 * a0 < 0) return true;
  if (y - k1 * a0 > z) return false;
  if (x + k2 * b0 < 0) return false;
  if (x + k2 * b0 > z) return true;
  if (y - k2 * a0 < 0) return true;
  if (y - k2 * a0 > z) return false;
  if (x + k1 * b0 > y - k1 * a0) return true;
  if (x + k2 * b0 > y - k2 * a0) return true;
  return f(k1) <= f(k2);
}
int main() {
  int n, s;
  cin >> n >> s;
  int cnt[3] = {};
  for (int i = 0; i < n; i++) {
    int x;
    scanf("%d", &x);
    cnt[x - 3]++;
  }
  a = cnt[0], b = cnt[1], c = cnt[2];
  long long ans = INF, ix, iy, iz;
  for (z = 1; z * c <= s; z++) {
    long long g;
    gcd(a, b, g, x, y);
    if ((s - z * c) % g) continue;
    long long K = (s - z * c) / g;
    x *= K;
    y *= K;
    a0 = a / g;
    b0 = b / g;
    long long L = -INF, R = INF;
    while (L < R) {
      long long M1 = L + (R - L) / 3, M2 = R - (R - L) / 3;
      if (chk(M1, M2))
        R = M2 - 1;
      else
        L = M1 + 1;
    }
    long long xx = x + L * b0, yy = y - L * a0;
    if (0 <= xx && xx <= yy && yy <= z) {
      if (umin(ans, f(L))) {
        ix = xx;
        iy = yy;
        iz = z;
      }
    }
  }
  if (ans < INF)
    cout << ix << " " << iy << " " << iz << endl;
  else
    puts("-1");
  return 0;
}
