#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const ll oo = 2e18;
const int B = 100;
const int N = 1e5+5;
const int NODES = 5e5+5;
struct Edge {
int to;
ll w;
};
int n, m, c, S[B], bup[B][N], bdown[B][N];
vector<Edge> adj[NODES];
vector<int> st[B], up[B], down[B];
ll dist[NODES];
void solve() {
cin >> n >> m >> c;
int nodes = n + m;
for (int d = 1; d < B; d++) {
int S_d = max(1, (int)sqrt(n / (2.0 * d)));
S[d] = S_d;
st[d].assign(d + 1, 0);
int blocks = 0;
for (int r = 0; r < d; r++) {
int cnt = 0;
for (int x = r; x <= n; x += d)
if (x >= 1) cnt++;
int b = (cnt + S_d - 1) / S_d;
st[d][r] = blocks;
blocks += b;
}
up[d].resize(blocks);
down[d].resize(blocks);
for (int i = 0; i < blocks; i++) {
up[d][i] = ++nodes;
down[d][i] = ++nodes;
}
}
for (int i = 1; i < n; i++) {
adj[i].push_back({i + 1, c});
adj[i + 1].push_back({i, c});
}
for (int d = 1; d < B; d++) {
int S_d = S[d];
for (int x = 1; x <= n; x++) {
int r = x % d;
int first = (r == 0 ? d : r);
int idx = (x - first) / d;
int b = idx / S_d;
int bid = st[d][r] + b;
int u = up[d][bid], v = down[d][bid];
bup[d][x] = u, bdown[d][x] = v;
adj[x].push_back({u, 0});
adj[v].push_back({x, 0});
}
}
for (int i = 1; i <= m; i++) {
int l, d, k, t; cin >> l >> d >> k >> t;
int R = l + k * d, V = n + i;
if (d >= B) {
for (int j = 0; j <= k; j++) {
int x = l + j * d;
if (x > n) break;
adj[x].push_back({V, t});
adj[V].push_back({x, 0});
}
} else {
int S_d = S[d];
int r = l % d;
int first = (r == 0 ? d : r);
int idx_s = (l - first) / d, idx_e = (R - first) / d;
int b_s = idx_s / S_d, b_e = idx_e / S_d;
if (b_s == b_e) {
for (int idx = idx_s; idx <= idx_e; idx++) {
int x = first + idx * d;
adj[x].push_back({V, t});
adj[V].push_back({x, 0});
}
} else {
int end_i = (b_s + 1) * S_d - 1;
for (int idx = idx_s; idx <= end_i; idx++) {
int x = first + idx * d;
adj[x].push_back({V, t});
adj[V].push_back({x, 0});
}
for (int b = b_s + 1; b <= b_e - 1; b++) {
int u = bup[d][first + b * S_d * d], v = bdown[d][first + b * S_d * d];
adj[u].push_back({V, t});
adj[V].push_back({v, 0});
}
int start_i = b_e * S_d;
for (int idx = start_i; idx <= idx_e; idx++) {
int x = first + idx * d;
adj[x].push_back({V, t});
adj[V].push_back({x, 0});
}
}
}
}
for (int i = 1; i <= nodes; i++) dist[i] = oo;
priority_queue<pair<ll, int>, vector<pair<ll, int>>, greater<pair<ll, int>>> pq;
dist[1] = 0;
pq.push({0, 1});
while (!pq.empty()) {
auto [d, u] = pq.top(); pq.pop();
if (d > dist[u]) continue;
for (Edge& e : adj[u]) {
int v = e.to, w = e.w;
if (dist[v] > d + w) {
dist[v] = d + w;
pq.push({dist[v], v});
}
}
}
for (int i = 2; i <= n; i++) {
if (dist[i] == oo) cout << "-1 ";
else cout << dist[i] << " ";
}
cout << "\n";
}
int main() {
ios_base::sync_with_stdio(false); cin.tie(NULL);
int tests = 1; // cin >> tests;
while (tests--) solve();
#ifndef ONLINE_JUDGE
cerr << "\nTime elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";
#endif
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp1c2luZyBsbCA9IGxvbmcgbG9uZzsKCmNvbnN0IGxsIG9vID0gMmUxODsKY29uc3QgaW50IEIgPSAxMDA7CmNvbnN0IGludCBOID0gMWU1KzU7CmNvbnN0IGludCBOT0RFUyA9IDVlNSs1OwoKc3RydWN0IEVkZ2UgewogICAgaW50IHRvOwogICAgbGwgdzsKfTsKCmludCBuLCBtLCBjLCBTW0JdLCBidXBbQl1bTl0sIGJkb3duW0JdW05dOwp2ZWN0b3I8RWRnZT4gYWRqW05PREVTXTsKdmVjdG9yPGludD4gc3RbQl0sIHVwW0JdLCBkb3duW0JdOwpsbCBkaXN0W05PREVTXTsKCnZvaWQgc29sdmUoKSB7CiAgICBjaW4gPj4gbiA+PiBtID4+IGM7CgogICAgaW50IG5vZGVzID0gbiArIG07CiAgICBmb3IgKGludCBkID0gMTsgZCA8IEI7IGQrKykgewogICAgICAgIGludCBTX2QgPSBtYXgoMSwgKGludClzcXJ0KG4gLyAoMi4wICogZCkpKTsKICAgICAgICBTW2RdID0gU19kOwogICAgICAgIHN0W2RdLmFzc2lnbihkICsgMSwgMCk7CiAgICAgICAgaW50IGJsb2NrcyA9IDA7CiAgICAgICAgZm9yIChpbnQgciA9IDA7IHIgPCBkOyByKyspIHsKICAgICAgICAgICAgaW50IGNudCA9IDA7CiAgICAgICAgICAgIGZvciAoaW50IHggPSByOyB4IDw9IG47IHggKz0gZCkKICAgICAgICAgICAgICAgIGlmICh4ID49IDEpIGNudCsrOwogICAgICAgICAgICBpbnQgYiA9IChjbnQgKyBTX2QgLSAxKSAvIFNfZDsKICAgICAgICAgICAgc3RbZF1bcl0gPSBibG9ja3M7CiAgICAgICAgICAgIGJsb2NrcyArPSBiOwogICAgICAgIH0KICAgICAgICB1cFtkXS5yZXNpemUoYmxvY2tzKTsKICAgICAgICBkb3duW2RdLnJlc2l6ZShibG9ja3MpOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYmxvY2tzOyBpKyspIHsKICAgICAgICAgICAgdXBbZF1baV0gPSArK25vZGVzOwogICAgICAgICAgICBkb3duW2RdW2ldID0gKytub2RlczsKICAgICAgICB9CiAgICB9CgogICAgZm9yIChpbnQgaSA9IDE7IGkgPCBuOyBpKyspIHsKICAgICAgICBhZGpbaV0ucHVzaF9iYWNrKHtpICsgMSwgY30pOwogICAgICAgIGFkaltpICsgMV0ucHVzaF9iYWNrKHtpLCBjfSk7CiAgICB9CgogICAgZm9yIChpbnQgZCA9IDE7IGQgPCBCOyBkKyspIHsKICAgICAgICBpbnQgU19kID0gU1tkXTsKICAgICAgICBmb3IgKGludCB4ID0gMTsgeCA8PSBuOyB4KyspIHsKICAgICAgICAgICAgaW50IHIgPSB4ICUgZDsKICAgICAgICAgICAgaW50IGZpcnN0ID0gKHIgPT0gMCA/IGQgOiByKTsKICAgICAgICAgICAgaW50IGlkeCA9ICh4IC0gZmlyc3QpIC8gZDsKICAgICAgICAgICAgaW50IGIgPSBpZHggLyBTX2Q7CiAgICAgICAgICAgIGludCBiaWQgPSBzdFtkXVtyXSArIGI7CiAgICAgICAgICAgIGludCB1ID0gdXBbZF1bYmlkXSwgdiA9IGRvd25bZF1bYmlkXTsKICAgICAgICAgICAgYnVwW2RdW3hdID0gdSwgYmRvd25bZF1beF0gPSB2OwogICAgICAgICAgICBhZGpbeF0ucHVzaF9iYWNrKHt1LCAwfSk7CiAgICAgICAgICAgIGFkalt2XS5wdXNoX2JhY2soe3gsIDB9KTsKICAgICAgICB9CiAgICB9CgogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbTsgaSsrKSB7CiAgICAgICAgaW50IGwsIGQsIGssIHQ7IGNpbiA+PiBsID4+IGQgPj4gayA+PiB0OwogICAgICAgIGludCBSID0gbCArIGsgKiBkLCBWID0gbiArIGk7CiAgICAgICAgaWYgKGQgPj0gQikgewogICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8PSBrOyBqKyspIHsKICAgICAgICAgICAgICAgIGludCB4ID0gbCArIGogKiBkOwogICAgICAgICAgICAgICAgaWYgKHggPiBuKSBicmVhazsKICAgICAgICAgICAgICAgIGFkalt4XS5wdXNoX2JhY2soe1YsIHR9KTsKICAgICAgICAgICAgICAgIGFkaltWXS5wdXNoX2JhY2soe3gsIDB9KTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGludCBTX2QgPSBTW2RdOwogICAgICAgICAgICBpbnQgciA9IGwgJSBkOwogICAgICAgICAgICBpbnQgZmlyc3QgPSAociA9PSAwID8gZCA6IHIpOwogICAgICAgICAgICBpbnQgaWR4X3MgPSAobCAtIGZpcnN0KSAvIGQsIGlkeF9lID0gKFIgLSBmaXJzdCkgLyBkOwogICAgICAgICAgICBpbnQgYl9zID0gaWR4X3MgLyBTX2QsIGJfZSA9IGlkeF9lIC8gU19kOwogICAgICAgICAgICBpZiAoYl9zID09IGJfZSkgewogICAgICAgICAgICAgICAgZm9yIChpbnQgaWR4ID0gaWR4X3M7IGlkeCA8PSBpZHhfZTsgaWR4KyspIHsKICAgICAgICAgICAgICAgICAgICBpbnQgeCA9IGZpcnN0ICsgaWR4ICogZDsKICAgICAgICAgICAgICAgICAgICBhZGpbeF0ucHVzaF9iYWNrKHtWLCB0fSk7CiAgICAgICAgICAgICAgICAgICAgYWRqW1ZdLnB1c2hfYmFjayh7eCwgMH0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaW50IGVuZF9pID0gKGJfcyArIDEpICogU19kIC0gMTsKICAgICAgICAgICAgICAgIGZvciAoaW50IGlkeCA9IGlkeF9zOyBpZHggPD0gZW5kX2k7IGlkeCsrKSB7CiAgICAgICAgICAgICAgICAgICAgaW50IHggPSBmaXJzdCArIGlkeCAqIGQ7CiAgICAgICAgICAgICAgICAgICAgYWRqW3hdLnB1c2hfYmFjayh7ViwgdH0pOwogICAgICAgICAgICAgICAgICAgIGFkaltWXS5wdXNoX2JhY2soe3gsIDB9KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZvciAoaW50IGIgPSBiX3MgKyAxOyBiIDw9IGJfZSAtIDE7IGIrKykgewogICAgICAgICAgICAgICAgICAgIGludCB1ID0gYnVwW2RdW2ZpcnN0ICsgYiAqIFNfZCAqIGRdLCB2ID0gYmRvd25bZF1bZmlyc3QgKyBiICogU19kICogZF07CiAgICAgICAgICAgICAgICAgICAgYWRqW3VdLnB1c2hfYmFjayh7ViwgdH0pOwogICAgICAgICAgICAgICAgICAgIGFkaltWXS5wdXNoX2JhY2soe3YsIDB9KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGludCBzdGFydF9pID0gYl9lICogU19kOwogICAgICAgICAgICAgICAgZm9yIChpbnQgaWR4ID0gc3RhcnRfaTsgaWR4IDw9IGlkeF9lOyBpZHgrKykgewogICAgICAgICAgICAgICAgICAgIGludCB4ID0gZmlyc3QgKyBpZHggKiBkOwogICAgICAgICAgICAgICAgICAgIGFkalt4XS5wdXNoX2JhY2soe1YsIHR9KTsKICAgICAgICAgICAgICAgICAgICBhZGpbVl0ucHVzaF9iYWNrKHt4LCAwfSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbm9kZXM7IGkrKykgZGlzdFtpXSA9IG9vOwogICAgcHJpb3JpdHlfcXVldWU8cGFpcjxsbCwgaW50PiwgdmVjdG9yPHBhaXI8bGwsIGludD4+LCBncmVhdGVyPHBhaXI8bGwsIGludD4+PiBwcTsKCiAgICBkaXN0WzFdID0gMDsKICAgIHBxLnB1c2goezAsIDF9KTsKCiAgICB3aGlsZSAoIXBxLmVtcHR5KCkpIHsKICAgICAgICBhdXRvIFtkLCB1XSA9IHBxLnRvcCgpOyBwcS5wb3AoKTsKICAgICAgICBpZiAoZCA+IGRpc3RbdV0pIGNvbnRpbnVlOwoKICAgICAgICBmb3IgKEVkZ2UmIGUgOiBhZGpbdV0pIHsKICAgICAgICAgICAgaW50IHYgPSBlLnRvLCB3ID0gZS53OwogICAgICAgICAgICBpZiAoZGlzdFt2XSA+IGQgKyB3KSB7CiAgICAgICAgICAgICAgICBkaXN0W3ZdID0gZCArIHc7CiAgICAgICAgICAgICAgICBwcS5wdXNoKHtkaXN0W3ZdLCB2fSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgZm9yIChpbnQgaSA9IDI7IGkgPD0gbjsgaSsrKSB7CiAgICAgICAgaWYgKGRpc3RbaV0gPT0gb28pIGNvdXQgPDwgIi0xICI7CiAgICAgICAgZWxzZSBjb3V0IDw8IGRpc3RbaV0gPDwgIiAiOwogICAgfQogICAgY291dCA8PCAiXG4iOwp9CgoKaW50IG1haW4oKSB7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsgY2luLnRpZShOVUxMKTsKCiAgICBpbnQgdGVzdHMgPSAxOyAvLyBjaW4gPj4gdGVzdHM7CiAgICB3aGlsZSAodGVzdHMtLSkgc29sdmUoKTsKCiAgICAjaWZuZGVmIE9OTElORV9KVURHRQogICAgY2VyciA8PCAiXG5UaW1lIGVsYXBzZWQ6ICIgPDwgMS4wICogY2xvY2soKSAvIENMT0NLU19QRVJfU0VDIDw8ICIgcy5cbiI7CiAgICAjZW5kaWYKCiAgICByZXR1cm4gMDsKfQ==