#include <bits/stdc++.h>
using namespace std;
#define int long long
#define fastIO ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define fileIO freopen("input.txt", "r", stdin);freopen("output.txt", "w", stdout);
struct asst
{
int t, z, y;
};
int countMaxBalloons(int t, int z, int y, int Time)
{
int batchTime = (z * t) + y;
int batchCount = (Time / batchTime);
int remTime = Time % batchTime;
int totalBalloons = 0;
totalBalloons += (batchCount * z);
if (remTime != 0) {
if (remTime / t >= z) {
totalBalloons += z;
}
else {
totalBalloons += (remTime / t);
}
}
return totalBalloons;
}
bool isBalloonPossible(int t, int z, int y, int balloons, int Time)
{
int batchTime = (z * t) + y;
int batches = balloons / z;
bool ok = (balloons % z == 0) ? 1 : 0;
int currTime = 0;
if (ok) {
batches -= 1;
currTime = (batchTime * batches) + (z * t);
}
else {
currTime = (batchTime * (batches)) + ((balloons % z) * t);
}
return (currTime <= Time);
}
bool isPossible(asst *assistant, int n, int m, int Time)
{
int totalBalloons = 0;
for (int i = 0; i < n; i++) {
int t = assistant[i].t;
int z = assistant[i].z;
int y = assistant[i].y;
int lo = 0, hi = (int) 1e9;
while (hi > lo + 1) {
int balloons = (lo + hi) >> 1;
if (isBalloonPossible(t, z, y, balloons, Time)) {
lo = balloons;
}
else {
hi = balloons;
}
}
totalBalloons += lo;
}
return (totalBalloons >= m);
}
int32_t main()
{
fastIO
// fileIO
int m, n;
cin >> m >> n;
asst assistant[n];
for (int i = 0; i < n; i++) {
cin >> assistant[i].t >> assistant[i].z >> assistant[i].y;
}
int minTime = -1, maxTime = (int) 1e9;
while (maxTime > minTime + 1) {
int Time = (minTime + maxTime) >> 1;
if (isPossible(assistant, n, m, Time)) {
maxTime = Time;
}
else {
minTime = Time;
}
}
cout << maxTime << endl;
int count[n];
memset(count, 0, sizeof count);
for (int i = 0; i < n; i++) {
int t = assistant[i].t;
int z = assistant[i].z;
int y = assistant[i].y;
count[i] = countMaxBalloons(t, z, y, maxTime);
}
int totalBalloons = 0;
for (int i = 0; i < n; i++) {
if (totalBalloons + count[i] <= m) {
cout << count[i] << " ";
totalBalloons += count[i];
}
else {
if (totalBalloons == m) {
cout << 0 << " ";
}
else {
cout << (m - totalBalloons) << " ";
totalBalloons = m;
}
}
}
cout << endl;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgaW50CWxvbmcgbG9uZwojZGVmaW5lIGZhc3RJTwlpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTtjaW4udGllKDApO2NvdXQudGllKDApOwojZGVmaW5lIGZpbGVJTwlmcmVvcGVuKCJpbnB1dC50eHQiLCAiciIsIHN0ZGluKTtmcmVvcGVuKCJvdXRwdXQudHh0IiwgInciLCBzdGRvdXQpOwoKCnN0cnVjdCBhc3N0CnsKCWludCB0LCB6LCB5Owp9OwoKaW50IGNvdW50TWF4QmFsbG9vbnMoaW50IHQsIGludCB6LCBpbnQgeSwgaW50IFRpbWUpCnsKCWludCBiYXRjaFRpbWUgPSAoeiAqIHQpICsgeTsKCWludCBiYXRjaENvdW50ID0gKFRpbWUgLyBiYXRjaFRpbWUpOwoJaW50IHJlbVRpbWUgPSBUaW1lICUgYmF0Y2hUaW1lOwoJaW50IHRvdGFsQmFsbG9vbnMgPSAwOwoJdG90YWxCYWxsb29ucyArPSAoYmF0Y2hDb3VudCAqIHopOwoJaWYgKHJlbVRpbWUgIT0gMCkgewoJCWlmIChyZW1UaW1lIC8gdCA+PSB6KSB7CgkJCXRvdGFsQmFsbG9vbnMgKz0gejsKCQl9CgkJZWxzZSB7CgkJCXRvdGFsQmFsbG9vbnMgKz0gKHJlbVRpbWUgLyB0KTsKCQl9Cgl9CglyZXR1cm4gdG90YWxCYWxsb29uczsKfQoKYm9vbCBpc0JhbGxvb25Qb3NzaWJsZShpbnQgdCwgaW50IHosIGludCB5LCBpbnQgYmFsbG9vbnMsIGludCBUaW1lKQp7CglpbnQgYmF0Y2hUaW1lID0gKHogKiB0KSArIHk7CglpbnQgYmF0Y2hlcyA9IGJhbGxvb25zIC8gejsKCWJvb2wgb2sgPSAoYmFsbG9vbnMgJSB6ID09IDApID8gMSA6IDA7CglpbnQgY3VyclRpbWUgPSAwOwoJaWYgKG9rKSB7CgkJYmF0Y2hlcyAtPSAxOwoJCWN1cnJUaW1lID0gKGJhdGNoVGltZSAqIGJhdGNoZXMpICsgKHogKiB0KTsKCX0KCWVsc2UgewoJCWN1cnJUaW1lID0gKGJhdGNoVGltZSAqIChiYXRjaGVzKSkgKyAoKGJhbGxvb25zICUgeikgKiB0KTsKCX0KCXJldHVybiAoY3VyclRpbWUgPD0gVGltZSk7Cn0KCgpib29sIGlzUG9zc2libGUoYXNzdCAqYXNzaXN0YW50LCBpbnQgbiwgaW50IG0sIGludCBUaW1lKQp7CglpbnQgdG90YWxCYWxsb29ucyA9IDA7Cglmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewoJCWludCB0ID0gYXNzaXN0YW50W2ldLnQ7CgkJaW50IHogPSBhc3Npc3RhbnRbaV0uejsKCQlpbnQgeSA9IGFzc2lzdGFudFtpXS55OwoJCWludCBsbyA9IDAsIGhpID0gKGludCkgMWU5OwoJCXdoaWxlIChoaSA+IGxvICsgMSkgewoJCQlpbnQgYmFsbG9vbnMgPSAobG8gKyBoaSkgPj4gMTsKCQkJaWYgKGlzQmFsbG9vblBvc3NpYmxlKHQsIHosIHksIGJhbGxvb25zLCBUaW1lKSkgewoJCQkJbG8gPSBiYWxsb29uczsKCQkJfQoJCQllbHNlIHsKCQkJCWhpID0gYmFsbG9vbnM7CgkJCX0KCQl9CgkJdG90YWxCYWxsb29ucyArPSBsbzsKCX0KCXJldHVybiAodG90YWxCYWxsb29ucyA+PSBtKTsKfQoKCmludDMyX3QgbWFpbigpCnsKCWZhc3RJTwoJLy8gZmlsZUlPCgoJaW50IG0sIG47CgljaW4gPj4gbSA+PiBuOwoJYXNzdCBhc3Npc3RhbnRbbl07Cglmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewoJCWNpbiA+PiBhc3Npc3RhbnRbaV0udCA+PiBhc3Npc3RhbnRbaV0ueiA+PiBhc3Npc3RhbnRbaV0ueTsKCX0KCWludCBtaW5UaW1lID0gLTEsIG1heFRpbWUgPSAoaW50KSAxZTk7Cgl3aGlsZSAobWF4VGltZSA+IG1pblRpbWUgKyAxKSB7CgkJaW50IFRpbWUgPSAobWluVGltZSArIG1heFRpbWUpID4+IDE7CgkJaWYgKGlzUG9zc2libGUoYXNzaXN0YW50LCBuLCBtLCBUaW1lKSkgewoJCQltYXhUaW1lID0gVGltZTsKCQl9CgkJZWxzZSB7CgkJCW1pblRpbWUgPSBUaW1lOwoJCX0KCX0KCWNvdXQgPDwgbWF4VGltZSA8PCBlbmRsOwoJaW50IGNvdW50W25dOwoJbWVtc2V0KGNvdW50LCAwLCBzaXplb2YgY291bnQpOwoJZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKCQlpbnQgdCA9IGFzc2lzdGFudFtpXS50OwoJCWludCB6ID0gYXNzaXN0YW50W2ldLno7CgkJaW50IHkgPSBhc3Npc3RhbnRbaV0ueTsKCQljb3VudFtpXSA9IGNvdW50TWF4QmFsbG9vbnModCwgeiwgeSwgbWF4VGltZSk7Cgl9CglpbnQgdG90YWxCYWxsb29ucyA9IDA7Cglmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewoJCWlmICh0b3RhbEJhbGxvb25zICsgY291bnRbaV0gPD0gbSkgewoJCQljb3V0IDw8IGNvdW50W2ldIDw8ICIgIjsKCQkJdG90YWxCYWxsb29ucyArPSBjb3VudFtpXTsKCQl9CgkJZWxzZSB7CgkJCWlmICh0b3RhbEJhbGxvb25zID09IG0pIHsKCQkJCWNvdXQgPDwgMCA8PCAiICI7CgkJCX0KCQkJZWxzZSB7CgkJCQljb3V0IDw8IChtIC0gdG90YWxCYWxsb29ucykgPDwgIiAiOwoJCQkJdG90YWxCYWxsb29ucyA9IG07CgkJCX0KCQl9Cgl9Cgljb3V0IDw8IGVuZGw7CgoJcmV0dXJuIDA7Cn0=