import java.util.Scanner;
public class Main {
private static int m;
private static int n;
private static int[] a;
private static int[] b;
private static int[] c;
private static int baloonsByIthPersonInXMinutes(int i, int x) {
int fullCycleTime = a[i] * b[i] + c[i];
int fullCyclesCount = x / fullCycleTime;
int remainingTime = x - fullCyclesCount*fullCycleTime;
int balloonsInRemainingTime
= Math.
min(b
[i
], remainingTime
/ a
[i
]); return fullCyclesCount * b[i] + balloonsInRemainingTime;
}
private static int totalBaloonsInXMinutes(int x) {
int result = 0;
for (int i = 0; i < n; ++i) {
result += baloonsByIthPersonInXMinutes(i, x);
}
return result;
}
private static int findUpperBound() {
int result = 1;
while (totalBaloonsInXMinutes(result) < m) {
result *= 2;
}
return result;
}
private static int solveByBinarySearch(int lowerBound, int upperBound) {
if (lowerBound == upperBound) return lowerBound;
int middle = (lowerBound + upperBound) / 2;
int middleValue = totalBaloonsInXMinutes(middle);
if (middleValue < m)
return solveByBinarySearch(middle + 1, upperBound);
else
return solveByBinarySearch(lowerBound, middle);
}
public static void main
(String[] args
) { Scanner in
= new Scanner
(System.
in); m = in.nextInt();
n = in.nextInt();
a = new int[n];
b = new int[n];
c = new int[n];
for(int i = 0; i < n; i++) {
a[i] = in.nextInt();
b[i] = in.nextInt();
c[i] = in.nextInt();
}
int upperBound = findUpperBound();
int result = solveByBinarySearch(upperBound / 2, upperBound);
}
}
aW1wb3J0IGphdmEudXRpbC5TY2FubmVyOwoKcHVibGljIGNsYXNzIE1haW4gewoJcHJpdmF0ZSBzdGF0aWMgaW50IG07Cglwcml2YXRlIHN0YXRpYyBpbnQgbjsKCXByaXZhdGUgc3RhdGljIGludFtdIGE7Cglwcml2YXRlIHN0YXRpYyBpbnRbXSBiOwoJcHJpdmF0ZSBzdGF0aWMgaW50W10gYzsKCQoJcHJpdmF0ZSBzdGF0aWMgaW50IGJhbG9vbnNCeUl0aFBlcnNvbkluWE1pbnV0ZXMoaW50IGksIGludCB4KSB7CgkJaW50IGZ1bGxDeWNsZVRpbWUgPSBhW2ldICogYltpXSArIGNbaV07CgkJaW50IGZ1bGxDeWNsZXNDb3VudCA9IHggLyBmdWxsQ3ljbGVUaW1lOwoJCWludCByZW1haW5pbmdUaW1lID0geCAtIGZ1bGxDeWNsZXNDb3VudCpmdWxsQ3ljbGVUaW1lOwoJCWludCBiYWxsb29uc0luUmVtYWluaW5nVGltZSA9IE1hdGgubWluKGJbaV0sIHJlbWFpbmluZ1RpbWUgLyBhW2ldKTsKCQlyZXR1cm4gZnVsbEN5Y2xlc0NvdW50ICogYltpXSArIGJhbGxvb25zSW5SZW1haW5pbmdUaW1lOwoJfQoJCglwcml2YXRlIHN0YXRpYyBpbnQgdG90YWxCYWxvb25zSW5YTWludXRlcyhpbnQgeCkgewoJCWludCByZXN1bHQgPSAwOwoJCWZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKSB7CgkJCXJlc3VsdCArPSBiYWxvb25zQnlJdGhQZXJzb25JblhNaW51dGVzKGksIHgpOwoJCX0KCQlyZXR1cm4gcmVzdWx0OwoJfQoJCglwcml2YXRlIHN0YXRpYyBpbnQgZmluZFVwcGVyQm91bmQoKSB7CgkJaW50IHJlc3VsdCA9IDE7CgkJd2hpbGUgKHRvdGFsQmFsb29uc0luWE1pbnV0ZXMocmVzdWx0KSA8IG0pIHsKCQkJcmVzdWx0ICo9IDI7CgkJfQoJCXJldHVybiByZXN1bHQ7Cgl9CgkKCXByaXZhdGUgc3RhdGljIGludCBzb2x2ZUJ5QmluYXJ5U2VhcmNoKGludCBsb3dlckJvdW5kLCBpbnQgdXBwZXJCb3VuZCkgewoJCWlmIChsb3dlckJvdW5kID09IHVwcGVyQm91bmQpIHJldHVybiBsb3dlckJvdW5kOwoJCWludCBtaWRkbGUgPSAobG93ZXJCb3VuZCArIHVwcGVyQm91bmQpIC8gMjsKCQlpbnQgbWlkZGxlVmFsdWUgPSB0b3RhbEJhbG9vbnNJblhNaW51dGVzKG1pZGRsZSk7CgkJaWYgKG1pZGRsZVZhbHVlIDwgbSkKCQkJcmV0dXJuIHNvbHZlQnlCaW5hcnlTZWFyY2gobWlkZGxlICsgMSwgdXBwZXJCb3VuZCk7CgkJZWxzZQoJCQlyZXR1cm4gc29sdmVCeUJpbmFyeVNlYXJjaChsb3dlckJvdW5kLCBtaWRkbGUpOwoKCX0KCQogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgIFNjYW5uZXIgaW4gPSBuZXcgU2Nhbm5lcihTeXN0ZW0uaW4pOwogICAgICAgIG0gPSBpbi5uZXh0SW50KCk7CiAgICAgICAgbiA9IGluLm5leHRJbnQoKTsKICAgICAgICBhID0gbmV3IGludFtuXTsKICAgICAgICBiID0gbmV3IGludFtuXTsKICAgICAgICBjID0gbmV3IGludFtuXTsKICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgICAgIGFbaV0gPSBpbi5uZXh0SW50KCk7CiAgICAgICAgICAgIGJbaV0gPSBpbi5uZXh0SW50KCk7CiAgICAgICAgICAgIGNbaV0gPSBpbi5uZXh0SW50KCk7CiAgICAgICAgfQoJCWludCB1cHBlckJvdW5kID0gZmluZFVwcGVyQm91bmQoKTsKCQlpbnQgcmVzdWx0ID0gc29sdmVCeUJpbmFyeVNlYXJjaCh1cHBlckJvdW5kIC8gMiwgdXBwZXJCb3VuZCk7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJlc3VsdCk7CiAgICB9Cn0=