我的第一个文章^_^,有不完善的地方可以指点一下
'''C.The Football Season'''
#完善版 //解决了部分cf数据库中没有的数据量 比如3 20 15 2
#思路基本清晰
import math #利用了math库,下面的gcd(求公约数用到了这个math库)
n,p,w,d = list(map(int,input().split()))
if p%math.gcd(w, d)!=0:
print(-1)
else:
wcnt = p//w#可能获胜的场数(p//w 限制了wcnt肯定是小于等于n的)
wjl=wcnt*w #可能获得的总胜场分数
djl = p-wjl#总分减去可能赢的分数,暂且认为是平局获得分数
dcnt = djl//d#可能平局的场数
while djl%d!=0 and wcnt!=0:#wcnt!=0限制了wcnt不会小于0
djl+=w
wjl-=w
wcnt-=1
dcnt=djl//d
print(wcnt,dcnt,n-wcnt-dcnt) if wcnt+dcnt<=n and\
wcnt*w+dcnt*d==p else print(-1)
#本题用到了 <拓展欧几里得>(我只用到--→利用公约数判断是否有解)
# 二元一次不定方程:ax + by = c
# 已知a,b,c的值,求x和y
# 判断是否存在一个x和一个y,使得等式成立
# ↓↓↓↓↓↓↓↓↓↓↓↓↓判断方法↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
# 当c%gcd(a,b)==0时,方程无解(gcd是指最大公约数)
# 也就是说当C%gcd(a,b)!=0时,方程有解
# ↑↑↑↑↑↑↑↑↑↑↑↑↑判断方法↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
#1.先通过w和d的公约数进行判断,wx+dy=p是否有解(x表示wcnt,y表示dcnt)
# 注意:这道题限制了x>=0、y>=0以及x+y<=n
# 如果无解,输出-1
# 如果有解:
#2.
# ①先假设wcnt(胜局)的最大可能场数
# wcnt(胜场数) = p//w
# wjl(胜场分数)=wcnt*w
# djl (暂且认为是平局分)= p-wjl
# 令dcnt(平局数)=wcnt*djl//d
# ②当wcnt==0 or djl%d==0时,
# 则有可能找到了符合(题目条件)的x和y的解
# 这时我们还要进行一次判断
# wcnt+dcnt<=n and wcnt*w+dcnt*d==p (符合该条件就会出结果,不符合就输出-1)
# 这个条件限制了wcnt+dcnt不会超过n(总场数),以及胜场分和平局分的总和不会超过总场数