#include <bits/stdc++.h>
using namespace std;
const int INF = 1000000000;
int bestk3, bestk4, bestk5;
int bestcost = INF;
int s;
int c3, c4, c5;
pair<int, int> bezout;
int r(int a, int b) {
  int simpleR = ((a) >= 0 ? (a) : -(a)) % ((b) >= 0 ? (b) : -(b));
  return (a >= 0 || simpleR == 0) ? simpleR : ((b) >= 0 ? (b) : -(b)) - simpleR;
}
int q(int a, int b) { return (a - r(a, b)) / b; }
int f(int k3, int k4, int k5) {
  return ((c3 * k3 - c4 * k4) >= 0 ? (c3 * k3 - c4 * k4)
                                   : -(c3 * k3 - c4 * k4)) +
         ((c4 * k4 - c5 * k5) >= 0 ? (c4 * k4 - c5 * k5)
                                   : -(c4 * k4 - c5 * k5));
}
pair<int, int> solveBezout(int x, int y) {
  if (y == 0) return pair<int, int>(1, 1);
  int r = x % y;
  int q = x / y;
  pair<int, int> s = solveBezout(y, r);
  return pair<int, int>(s.second, s.first - q * s.second);
}
void updateSoln(int k3, int k4, int k5) {
  assert(c3 * k3 + c4 * k4 + c5 * k5 == s);
  if (0 <= k3 && k3 <= k4 && k4 <= k5) {
    int cost = f(k3, k4, k5);
    if (cost < bestcost) {
      bestcost = cost;
      bestk3 = k3;
      bestk4 = k4;
      bestk5 = k5;
    }
  }
}
void solve(int k4) {
  int gcd = c3 * bezout.first + c5 * bezout.second;
  int k = s - c4 * k4;
  if (k % gcd != 0) return;
  int a3 = c5 / gcd;
  int a5 = -c3 / gcd;
  int b3 = bezout.first * k / gcd;
  int b5 = bezout.second * k / gcd;
  vector<int> tees;
  int t;
  t = q(q(c4 * k4, c3) - b3, a3);
  tees.push_back(t);
  tees.push_back(t + 1);
  t = q(q(c4 * k4, c5) - b5, a5);
  tees.push_back(t);
  tees.push_back(t + 1);
  t = q(k4 - b3, a3);
  tees.push_back(t);
  t = q(k4 - c5 - 1, a5) + 1;
  tees.push_back(t);
  for (unsigned int i = 0; i < tees.size(); i++) {
    updateSoln(a3 * tees[i] + b3, k4, a5 * tees[i] + b5);
  }
}
int main() {
  int n;
  cin >> n >> s;
  for (int i = 0; i < n; i++) {
    int x;
    cin >> x;
    if (x == 3)
      c3++;
    else if (x == 4)
      c4++;
    else if (x == 5)
      c5++;
  }
  bezout = solveBezout(c3, c5);
  for (int k4 = 0; k4 * c4 < s; k4++) {
    solve(k4);
  }
  if (bestcost == INF) {
    cout << -1 << '\n';
  } else {
    cout << bestk3 << ' ' << bestk4 << ' ' << bestk5 << '\n';
  }
}
