// *
// *
// *  Created By : Pritish Thakkar 
// *  Hackerrank : ma5terdrag0n
// *  CodeChef : solo_loser
// *  Hackerearth : pritish9
// *------------------------------------
// *  OS : Ubuntu 16.04
// *  Language : CPP14
// *  Editor : Sublime Text 3
// *  C++ compiler : g++
// *
// *
#include<bits/stdc++.h>
#define pb push_back
#define mp make_pair
#define inf 1000000007
#define fr first
#define sc second
#define eps 1e-9
#define clr(a) memset(a, 0, sizeof(a))
#define sz(x) x.size()
#define sni(x) scanf("%d",&x)
#define snl(x) scanf("%lld", &x)
#define snc(x) scanf("%c", &c);
#define rep(n) for(int i = 0 ; i < n ;i ++)
#define repc(i, n) for(int i = 0 ; i < n ; i ++)
#define FOR(i, x, y) for(int i = x ; i < y ; i ++)
#define DEC(i, x, y) for(int i = x ; i >= y ; i --)
#define all(v) v.begin(), v.end()
#define min3(a, b, c) min(a, min(b,c))
#define max3(a, b, c) max(a, max(b, c))
#define alla(a, n) a, a+n
using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef pair<ll,ll> ii;
typedef vector<ll> vi;
typedef vector<ii> vii;

bool isUpper(char c) {return (c >= 'A' && c <= 'Z');}
bool isLower(char c) {return (c >= 'a' && c <= 'z');}
bool iplpha(char c) {return (c >= 'A' && c <= 'Z')||(c >= 'a' && c <= 'z');}
bool isnum(char c){return (c >= '0' and c <= '9');}
bool isalnum(char c) {return (c >= 'A' && c <= 'Z')||(c >= 'a' && c <= 'z')||(c >= '0' && c <= '9');}
char toUpper(char c){return isUpper(c)?c:c-'a'+'A';}
char toLower(char c){return isLower(c)?c:c+'a'-'A';}
bool isvowel(char c){c = toLower(c); return (c == 'a' or c == 'e' or c == 'i' or c == 'i' or c == 'o' or c == 'u');}
template<typename t> t gcd(t a, t b){a = abs(a), b = abs(b);return ((b == 0) ? a : gcd(b, a%b));} 
template<typename t> t lcm(t a, t b){return (a * (b / gcd(a, b)));}
template <typename T> T modpow(T base, T exp, T modulus) {base %= modulus;T result = 1;while (exp > 0) {if (exp & 1) result = (result * base) % modulus;base = (base * base) % modulus;exp >>= 1;}return result;}
string toLowerCase(string s){rep(s.size()){if(!isLower(s[i])){s[i] = toLower(s[i]);}}return s;}
string toUpperCase(string s){rep(s.size()){s[i] = toUpper(s[i]);}return s;}
template<typename T> void cumulative(T *a, T *b, T n){rep(n){i ? b[i] = b[i-1] + a[i] : b[i] = a[i];}}
bool ispal(string s){ll lo, hi;lo = 0;hi = s.length()-1;while(lo <= hi){if(s[lo] != s[hi]){return 0;}lo++;--hi;}return 1;}
template<class T >string toString(T n){string v = "";while(n){v.pb(n % 10 + '0');n /= 10;}reverse(all(v));return v;}
template<class T>
void fs(T &number){bool negative = false;register int c;number = 0;c = getchar();if (c=='-'){negative = true;c = getchar();}for (; (c>47 && c<58); c=getchar())number = number *10 + c - 48;if (negative)number *= -1;}
double areaOfTriangle(double ax, double ay, double bx, double by, double cx, double cy){
    double ans = 1.00 * fabs(ax * (by - cy) + bx * (cy - ay) + cx * (ay - by))/2.00;
    return ans;
}
 
//---------------------------- 

void solve(){
    // ll t;
    // cin >> t;
    // map<string, ll> m;
    // while(t--){
    //     ll n;
    //     cin >> n;
    //     rep(n){
    //         string s;
    //         cin >> s;
    //         if(s == "aa")m["a"]++;
    //         if(s == "bb")m["b"]++;
    //         m[s]++;
    //     }
    //     string s = "";
    //     ll count = 0;
    //     if(m["ab"] > m["ba"]){
    //         if(m["a"])
    //             s = "a" + s;
    //         while(m["ba"] > 0){
    //             s = s + "abba";
    //             m["ba"]--;
    //             m["ab"]--;
    //         }
    //         while(m["ab"]){
    //             s = s + "ab";
    //             m["ab"]--;
    //         }
    //         if(m["b"]){
    //             s.pb('b');
    //         }
    //     }else if(m["ab"] < m["ba"]){
    //         if(m["b"] or m["bb"]){
    //             s.pb('b');
    //         }
    //         while(m["ab"] > 0){
    //             s = s + "baab";
    //             m["ba"]--;
    //             m["ab"]--;
    //         }
    //         while(m["ba"]){
    //             s = s + "ba";
    //             m["ba"]--;
    //         }

    //         if(m["a"]){
    //             s.pb('a');
    //         }
    //     }
    //     cout << s << endl;
    //     ll ans = 1;
    //     for(int i = 1 ; i < sz(s) ; i++){
    //         if(s[i] != s[i-1])ans++;
    //     } 
    //     cout << ans << endl;
    // }
   ll n, m;
   cin >> n >> m;
   m /= 1000;
   // if(m <= 5){
   //  if(m == n)
   //  cout << "0 0 " << m << endl;
   //  else{
   //      cout << "-1 -1 -1\n";
   //  }return;
   // }
   if(m < n){
    cout << "-1 -1 -1\n";
   }else{
    for(int i = 0 ; i <= 2000 ; i ++){
        for(int j = 0 ; j <= 4000 ; j ++){
            // cout << 9*i + 4*j << " " << m - n << endl;
            if(9*i + 4*j == m-n && n - i - j >= 0){
                cout << i << " " << j << " " << n - i - j << endl;
                return;
            }
        }
    }
    cout << "-1 -1 -1\n";
   }
}

int main(){
    // std::ios::sync_with_stdio(0);
    int start = clock();
    #ifdef ONLINE_JUDGE
    #else
  //    freopen("input.in" , "r" , stdin);
      // freopen("output.txt", "w", stdout);
    #endif
    solve();
    int stop = clock();
    #ifdef ONLINE_JUDGE
    #else
//        cout << setprecision(6) << fixed << (stop - start) * 1000.00 / double(CLOCKS_PER_SEC)<< endl;
    #endif
}












Measured memory_bytes: 256