#include <bits/stdc++.h>
// #include <atcoder/all>
using namespace std;
// using namespace atcoder;
#define int long long

signed main(){
    // cout << fixed << setprecision(10) << flush;

    int N, K;
    cin >> N >> K;

    int ijk_sum;
    int num = 0;
    auto num_s = [&](int s){
        if(s < 3) return 0LL;
        if(s <= N+2) return (s-2)*(s-1)/2;
        if(s <= 2*N+1) return (s-1)*(2*N-s+2)/2 + (3*N-s+1)*(-N+s-2)/2;
        else return (3*N-s+1)*(3*N-s+2)/2;
    };

    auto num_two = [&](int t){
        if(t < 2) return 0LL;
        if(t <= N+1) return t-1;
        if(t <= 2*N) return 2*N-t+1;
        else return 0LL;
    };

    for(ijk_sum=3; ijk_sum<=3*N; ijk_sum++){
        int ns = num_s(ijk_sum);
        if(num + ns >= K) break;
        num += ns;
    }

    int i;
    for(i=1; i<=N; i++){
        int nt = num_two(ijk_sum-i);
        if(num + nt >= K) break;
        num += nt;
    }

    int j = max(1LL, ijk_sum-i-N), k = min(ijk_sum-i-1, N);
    j += K-num-1;
    k -= K-num-1;

    cout << i << " " << j << " " << k << endl;

    return 0;
}
#include <cstdio>
#include <algorithm>
using namespace std;
long long dp[4][3000005];
int ans[4];
int main()
{
    int n,st;
    long long k,sum,now;
    int all;
    scanf("%d%lld",&n,&k);
    dp[0][0]=1;
    for(int i=1;i<=3;i++)
    {
        sum=0;
        for(int j=0;j<=i*n;j++)
        {
            dp[i][j]=sum;
            sum+=dp[i-1][j];
            if(j>=n)
                sum-=dp[i-1][j-n];
        }
    }
    now=0;
    for(int i=0;i<=3*n;i++)
    {
        now+=dp[3][i];
        if(now>=k)
        {
            all=i;
            k-=now-dp[3][i];
            break;
        }
    }
    now=0;
    for(int i=1;i<=n;i++)
    {
        now+=dp[2][all-i];
        if(now>=k)
        {
            ans[1]=i;
            for(int j=1;j<=n;j++)
                if(all-ans[1]-j>=1&&all-ans[1]-j<=n)
                {
                    ans[2]=j;
                    ans[3]=all-ans[1]-ans[2];
                    break;
                }
            for(int j=0;j<k-(now-dp[2][all-i])-1;j++)
            {
                ans[2]++;
                ans[3]--;
            }
            printf("%d %d %d\n",ans[1],ans[2],ans[3]);
            break;
        }
    }
    return 0;
}
