#include <bits/stdc++.h>
using namespace std;
int x, y, q;
void exgcd(int a, int b) {
  int temp;
  if (b == 0) {
    x = 1;
    y = 0;
    q = a;
  } else {
    exgcd(b, a % b);
    temp = x;
    x = y;
    y = temp - a / b * y;
  }
}
int c3, c4, c5;
int k3, k4, k5;
int f, x0, Why_Cant_I_Use_y0_In_Eclipse;
int up, down;
void init() {
  up = 0xfffffff;
  down = -0xfffffff;
  down = max(down, (-x * f) / x0);
  if (x * f + x0 * down < 0) down++;
  up = min(up, (k4 - x * f) / x0);
  if (x * f + x0 * up > k4) up--;
  up = min(up, (y * f - k4) / Why_Cant_I_Use_y0_In_Eclipse);
  if (y * f - Why_Cant_I_Use_y0_In_Eclipse * up < k4) up--;
}
int o3, o4, o5;
int ans;
void get_o(int t) {
  o3 = x * f + x0 * t;
  o4 = k4;
  o5 = y * f - Why_Cant_I_Use_y0_In_Eclipse * t;
}
void solve(int s) {
  exgcd(c3, c5);
  if (s % q != 0) return;
  f = s / q;
  x0 = c5 / q;
  Why_Cant_I_Use_y0_In_Eclipse = c3 / q;
  {
    init();
    down = max(down, (c4 * k4 - c3 * x * f) / (c3 * x0));
    if (c3 * x * f + c3 * x0 * down < c4 * k4) down++;
    up = min(up, (c5 * y * f - c4 * k4) / (c5 * Why_Cant_I_Use_y0_In_Eclipse));
    if (c5 * y * f - c4 * k4 < c5 * Why_Cant_I_Use_y0_In_Eclipse * up) up--;
    if (down <= up) {
      int judge = s - 2 * c4 * k4;
      if (judge < ans) {
        ans = judge;
        get_o(down);
      }
    }
  }
  {
    init();
    up = min(up, (c4 * k4 - c3 * x * f) / (c3 * x0));
    if (c4 * k4 - c3 * x * f < c3 * x0 * up) up--;
    down =
        max(down, (c5 * y * f - c4 * k4) / (c5 * Why_Cant_I_Use_y0_In_Eclipse));
    if (c5 * y * f - c5 * Why_Cant_I_Use_y0_In_Eclipse * down > c4 * k4) down++;
    if (down <= up) {
      int judge = 2 * c4 * k4 - s;
      if (judge < ans) {
        ans = judge;
        get_o(up);
      }
    }
  }
  {
    init();
    down = max(down, (c4 * k4 - c3 * x * f) / (c3 * x0));
    if (c3 * x * f + c3 * x0 * down < c4 * k4) down++;
    down =
        max(down, (c5 * y * f - c4 * k4) / (c5 * Why_Cant_I_Use_y0_In_Eclipse));
    if (c5 * y * f - c5 * Why_Cant_I_Use_y0_In_Eclipse * down > c4 * k4) down++;
    if (down <= up) {
      int judge = c3 * (x * f + x0 * down) -
                  c5 * (y * f - Why_Cant_I_Use_y0_In_Eclipse * down);
      if (judge < ans) {
        ans = judge;
        get_o(down);
      }
    }
  }
  {
    init();
    up = min(up, (c4 * k4 - c3 * x * f) / (c3 * x0));
    if (c4 * k4 - c3 * x * f < c3 * x0 * up) up--;
    up = min(up, (c5 * y * f - c4 * k4) / (c5 * Why_Cant_I_Use_y0_In_Eclipse));
    if (c5 * y * f - c4 * k4 < c5 * Why_Cant_I_Use_y0_In_Eclipse * up) up--;
    if (down <= up) {
      int judge = -c3 * (x * f + x0 * up) +
                  c5 * (y * f - Why_Cant_I_Use_y0_In_Eclipse * up);
      if (judge < ans) {
        ans = judge;
        get_o(up);
      }
    }
  }
}
int main() {
  int n, s;
  scanf("%d %d", &n, &s);
  c3 = c4 = c5 = 0;
  while (n--) {
    int f;
    scanf("%d", &f);
    if (f == 3) c3++;
    if (f == 4) c4++;
    if (f == 5) c5++;
  }
  ans = 0xfffffff;
  for (int i = 0; i <= s; i++) {
    if (c4 * i > s) break;
    k4 = i;
    solve(s - c4 * k4);
  }
  if (ans == 0xfffffff)
    printf("-1\n");
  else {
    printf("%d %d %d\n", o3, o4, o5);
  }
  return 0;
}
