Buggy python submission (verdict: Runtime Error):
from typing import *

def main(N,Y):
    # type: (int, int) -> None
    """
    次の方程式
        x + y + z = N
        10x + 5y + z = Y
    の解を探索する．zを消去すると
        9x + 4y = Y - N
      where
        x >= 0
        y >= 0
        x + y <= N
    w = 2x+y と置くと
        x + 4w = Y - N
      where
        x >= 0
        w >= 0
        w - x <= Y
    xを消去すると条件は
        w  >= 0
        4w <= Y - N
        9w >= 2(Y - N)
    であり
        x = Y - N - 4w
        y = w - 2x
        z = N - x - y
    """
    Y = Y // 1000
    lb = (2*(Y-N)-1) // 9 + 1
    ub = (Y-N) // 4
    ans = None
    for w in range(lb,ub+1):
        x = Y - N - 4*w
        y = w - 2*x
        z = N - x - y
        assert(x >= 0 and y >= 0 and z >= 0)
        ans = (x,y,z)
        break
    if ans is not None:
        print("{0} {1} {2}".format(x,y,z))
    else:
        print("{0} {1} {2}".format(-1,-1,-1))
    return

if __name__ == '__main__':
    N, Y, *_ = map(int, input().split())
    main(N,Y)


Fixed submission:
def main(N,Y):
    # type: (int, int) -> None
    """
    次の方程式
        x + y + z = N
        10x + 5y + z = Y
    の解を探索する．zを消去すると
        9x + 4y = Y - N
      where
        x >= 0
        y >= 0
        x + y <= N
    w = 2x+y と置くと
        x + 4w = Y - N
      where
        x >= 0
        w >= 0
        w - x <= N
    xを消去すると条件は
        w  >= 0
        4w <= Y - N
        5w <= Y
        9w >= 2(Y - N)
    であり
        x = Y - N - 4w
        y = w - 2x
        z = N - x - y
    wを適当にboundした後は x>=0 and y>=0 and z >= 0 でfilteringするのが安心だが
    練習のために w のみでfilteringしてみる
    """
    Y = Y // 1000
    lb = (2*(Y-N)-1) // 9 + 1
    ub = min ((Y-N) // 4, Y // 5)
    ans = [ (x,y,z) for w in range(lb,ub+1) for x in [Y-N-4*w] for y in [w - 2*x] for z in [N - x - y] ]
    if ans == []:
        print("-1 -1 -1")
    else:
        x,y,z = ans[0]
        print("{0} {1} {2}".format(x,y,z))
    return

if __name__ == '__main__':
    N, Y, *_ = map(int, input().split())
    main(N,Y)

Buggy python submission (verdict: Runtime Error):
def main(N,Y):
    # type: (int, int) -> None
    """
    次の方程式
        x + y + z = N
        10x + 5y + z = Y
    の解を探索する．zを消去すると
        9x + 4y = Y - N
      where
        x >= 0
        y >= 0
        x + y <= N
    w = 2x+y と置くと
        x + 4w = Y - N
      where
        x >= 0
        w >= 0
        w - x <= Y
    xを消去すると条件は
        w  >= 0
        4w <= Y - N
        9w >= 2(Y - N)
    であり
        x = Y - N - 4w
        y = w - 2x
        z = N - x - y
    """
    Y = Y // 1000
    lb = 2*(Y-N) // 9
    ub = (Y-N-1) // 4 + 1
    ans = None
    for w in range(lb,ub):
        x = Y - N - 4*w
        y = w - 2*x
        z = N - x - y
        assert(x >= 0 and y >= 0 and z >= 0)
        ans = (x,y,z)
        break
    if ans is not None:
        print("{0} {1} {2}".format(x,y,z))
    else:
        print("{0} {1} {2}".format(-1,-1,-1))
    return

if __name__ == '__main__':
    N, Y, *_ = map(int, input().split())
    main(N,Y)


Fixed submission:
def main(N,Y):
    # type: (int, int) -> None
    """
    次の方程式
        x + y + z = N
        10x + 5y + z = Y
    の解を探索する．zを消去すると
        9x + 4y = Y - N
      where
        x >= 0
        y >= 0
        x + y <= N
    w = 2x+y と置くと
        x + 4w = Y - N
      where
        x >= 0
        w >= 0
        w - x <= N
    xを消去すると条件は
        w  >= 0
        4w <= Y - N
        5w <= Y
        9w >= 2(Y - N)
    であり
        x = Y - N - 4w
        y = w - 2x
        z = N - x - y
    wを適当にboundした後は x>=0 and y>=0 and z >= 0 でfilteringするのが安心だが
    練習のために w のみでfilteringしてみる
    """
    Y = Y // 1000
    lb = (2*(Y-N)-1) // 9 + 1
    ub = min ((Y-N) // 4, Y // 5)
    ans = [ (x,y,z) for w in range(lb,ub+1) for x in [Y-N-4*w] for y in [w - 2*x] for z in [N - x - y] ]
    if ans == []:
        print("-1 -1 -1")
    else:
        x,y,z = ans[0]
        print("{0} {1} {2}".format(x,y,z))
    return

if __name__ == '__main__':
    N, Y, *_ = map(int, input().split())
    main(N,Y)