# Children choose by total time played only. Leads to unstable matches.
n,m=map(int,raw_input().split())
b,r=map(int,raw_input().split())
event=[map(int,raw_input().split()) for k in range(r)]
first = [ [b] * m for _ in range(n) ]
total = [ [0] * m for _ in range(n) ]
cur = [(0, -1)] * n
for si, ki, ti in event:
    ki -= 1; ti -= 1
    ps, pt = cur[ki]
    if ti >= 0:
        first[ki][ti] = min(first[ki][ti], si)
    if pt >= 0:
        total[ki][pt] += si - ps
    cur[ki] = (si, ti)
for k in range(n):
    ps, pt = cur[k]
    if pt >= 0:
        total[k][pt] += b - ps

if n > m:
    print 'impossible'
else:
    ans=[None]*n
    for k in range(n):
        for t in sorted(range(m), key=lambda i: -total[k][i]):
            if ans[k] is None:
                ans[k] = t + 1
                break
    print ' '.join(map(str, ans))
