#include <bits/stdc++.h>
int min(int a, int b) { return a < b ? a : b; }
int max(int a, int b) { return a > b ? a : b; }
int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); }
int d_, x_, y_;
void gcd_(int a, int b) {
  if (b == 0)
    d_ = a, x_ = 1, y_ = 0;
  else {
    int t;
    gcd_(b, a % b);
    t = x_ - a / b * y_;
    x_ = y_, y_ = t;
  }
}
int div_(int a, int b) { return a >= 0 ? a / b : -((-a + b - 1) / b); }
int main() {
  int n, s, i, c3, c4, c5, k3, d, c4_, c5_, ans, a3, a4, a5;
  scanf("%d%d", &n, &s);
  c3 = c4 = c5 = 0;
  for (i = 0; i < n; i++) {
    int x;
    scanf("%d", &x);
    if (x == 3)
      c3++;
    else if (x == 4)
      c4++;
    else
      c5++;
  }
  d = gcd(c4, c5);
  c4_ = c4 / d;
  c5_ = c5 / d;
  gcd_(c4_, c5_);
  ans = -1, a3 = a4 = a5 = -1;
  for (k3 = 0; k3 * n <= s; k3++) {
    int t = s - c3 * k3, k4_, k5_, lower, upper;
    int lower34, upper34, lower45, upper45;
    int lower1, upper1, lower2, upper2, lower3, upper3, lower4, upper4;
    if (t % d != 0) continue;
    t /= d;
    k4_ = x_ * t, k5_ = y_ * t;
    lower = div_(k3 - k4_ - 1, c5_) + 1;
    upper = div_(k5_ - k4_, c4_ + c5_);
    if (lower > upper) continue;
    upper34 = div_(c3 * k3 - c4 * k4_, c4 * c5_);
    lower34 = upper34 + 1;
    lower45 = div_(c5 * k5_ - c4 * k4_ - 1, c4 * c5_ + c5 * c4_) + 1;
    upper45 = lower45 - 1;
    lower1 = max(lower, lower45);
    upper1 = min(upper, upper34);
    if (lower1 <= upper1) {
      int k = lower1;
      int k4 = k4_ + c5_ * k;
      int k5 = k5_ - c4_ * k;
      int goal = abs(c3 * k3 - c4 * k4) + abs(c4 * k4 - c5 * k5);
      if (ans == -1 || ans > goal) {
        ans = goal;
        a3 = k3, a4 = k4, a5 = k5;
      }
    }
    lower2 = lower;
    upper2 = min(upper, min(upper34, upper45));
    if (lower2 <= upper2) {
      int k = upper2;
      int k4 = k4_ + c5_ * k;
      int k5 = k5_ - c4_ * k;
      int goal = abs(c3 * k3 - c4 * k4) + abs(c4 * k4 - c5 * k5);
      if (ans == -1 || ans > goal) {
        ans = goal;
        a3 = k3, a4 = k4, a5 = k5;
      }
    }
    lower3 = max(lower, lower34);
    upper3 = min(upper, upper45);
    if (lower3 <= upper3) {
      int k = upper3;
      int k4 = k4_ + c5_ * k;
      int k5 = k5_ - c4_ * k;
      int goal = abs(c3 * k3 - c4 * k4) + abs(c4 * k4 - c5 * k5);
      if (ans == -1 || ans > goal) {
        ans = goal;
        a3 = k3, a4 = k4, a5 = k5;
      }
    }
    lower4 = max(lower, max(lower34, lower45));
    upper4 = upper;
    if (lower4 <= upper4) {
      int k = lower4;
      int k4 = k4_ + c5_ * k;
      int k5 = k5_ - c4_ * k;
      int goal = abs(c3 * k3 - c4 * k4) + abs(c4 * k4 - c5 * k5);
      if (ans == -1 || ans > goal) {
        ans = goal;
        a3 = k3, a4 = k4, a5 = k5;
      }
    }
  }
  if (ans == -1)
    printf("-1\n");
  else
    printf("%d %d %d\n", a3, a4, a5);
  return 0;
}
