#include <bits/stdc++.h>
using namespace std;
int n, c[3], s;
int gcd(int a, int b, int &x, int &y) {
  if (b == 0) {
    x = 1, y = 0;
    return a;
  }
  int c = gcd(b, a % b, y, x);
  y -= a / b * x;
  return c;
}
int k[3], ans, f[4], first, g;
int check(int mid) {
  k[0] = first + c[2] / g * mid;
  k[2] = (s - c[0] * k[0] - c[1] * k[1]) / c[2];
  return abs(c[0] * k[0] - c[1] * k[1]) + abs(c[1] * k[1] - c[2] * k[2]);
}
int main() {
  scanf("%d%d", &n, &s);
  for (int i = 0; i < n; ++i) {
    int x;
    scanf("%d", &x);
    ++c[x - 3];
  }
  ans = INT_MAX;
  for (k[1] = 0; k[1] <= s / c[1]; ++k[1]) {
    int mm = min(k[1], (s - (c[1] + c[2]) * k[1]) / c[0]);
    int x, y, m = (s - c[1] * k[1]) % c[2];
    g = gcd(c[0], c[2], x, y);
    x = (x % c[2] + c[2]) % c[2];
    first = x * m / g % c[2];
    if (first <= mm && m % g == 0) {
      int l = 0, r = floor((mm - first) / (double(c[2]) / g)) + 1;
      while (r - l >= 3) {
        int ml = (r - l) / 3 + l;
        int mr = (r - l) / 3 * 2 + l;
        if (check(ml) < check(mr))
          r = mr;
        else
          l = ml;
      }
      if (l + 1 == r) {
        int t = check(l);
        if (t < ans) {
          ans = t;
          f[0] = first + c[2] / g * l, f[1] = k[1],
          f[2] = (s - c[0] * f[0] - c[1] * f[1]) / c[2];
        }
      } else {
        int t1 = check(l), t2 = check(l + 1);
        if (t1 < t2 && t1 < ans) {
          ans = t1;
          f[0] = first + c[2] / g * l, f[1] = k[1],
          f[2] = (s - c[0] * f[0] - c[1] * f[1]) / c[2];
        } else if (t2 < ans) {
          ans = t2;
          f[0] = first + c[2] / g * (l + 1), f[1] = k[1],
          f[2] = (s - c[0] * f[0] - c[1] * f[1]) / c[2];
        }
      }
    }
  }
  if (ans == INT_MAX)
    printf("-1\n");
  else
    printf("%d %d %d\n", f[0], f[1], f[2]);
  return 0;
}
