#include using namespace std; int main(void) { int n, m, b, r; scanf("%d%d%d%d", &n, &m, &b, &r); if (m < n) { printf("impossible\n"); return 0; } vector> totplay(n, vector(m, 0)); vector> firstplay(n, vector(m, b+1)); vector> curtoy(n, make_pair(-1, 0)); for (int i = 0; i < r; ++i) { int s, k, t; scanf("%d%d%d", &s, &k, &t); --k; --t; if (t != -1) firstplay[k][t] = min(firstplay[k][t], s); auto p = curtoy[k]; if (p.first != -1) totplay[k][p.first] += s - p.second; curtoy[k] = make_pair(t, s); } for (int i = 0; i < n; ++i) if (curtoy[i].first != -1) totplay[i][curtoy[i].first] += b - curtoy[i].second; vector> wish(n, vector(m, 0)); for (int i = 0; i < n; ++i) { iota(wish[i].begin(), wish[i].end(), 0); sort(wish[i].begin(), wish[i].end(), [&](int a, int b) { return firstplay[i][a] > firstplay[i][b]; }); assert(wish[i].size() == m); } vector toy(n), taken(m, false); for (int i = 0; i < n; ++i) { while (taken[wish[i].back()]) wish[i].pop_back(); toy[i] = wish[i].back(); taken[toy[i]] = true; } while (true) { bool ok = true; for (int i = 0; i < n; ++i) for (int j = 0; j < n; ++j) { if (i == j) continue; if (totplay[i][toy[j]] < totplay[j][toy[j]] && firstplay[i][toy[i]] > firstplay[i][toy[j]]) { ok = false; swap(toy[i], toy[j]); } } if (ok) break; } for (int i = 0; i < n; ++i) printf("%d\n", toy[i]+1); }