#include
#include
#include
using namespace std;
struct kandelabra {
int pos, cost, rad;
};
int M, K;
int n;
kandelabra v[105];
int dp[101][10005];
bool visited[101][10001];
int rec(int at, int k) {
if(at < 0) {
return 0;
}
if(k < 0) {
return 0;
}
if(dp[at][k] != -1) {
return dp[at][k];
}
int result1 = 0, result2 = 0, result = 0;
if(k - v[at].cost >= 0) {
int tmp = 0;
if(v[at].pos + v[at].rad <= M) {
tmp += v[at].rad;
}
else {
tmp += M - v[at].pos;
}
if(v[at].pos - v[at].rad >= 0) {
tmp += v[at].rad;
}
else {
tmp += v[at].pos;
}
result1 = rec(at - 1, k - v[at].cost) + tmp;
}
result2 = rec(at - 1, k);
if(result1 > result2) {
visited[at][k] = true;
}
result = max(result1, result2);
return dp[at][k] = result;
}
int upaleni_kandelabri[100001];
int main()
{
memset(dp, -1, sizeof dp);
memset(visited, false, sizeof visited);
memset(upaleni_kandelabri, 0, sizeof upaleni_kandelabri);
cin >> M >> K;
cin >> n;
for(int i = 0; i < n; i++) {
cin >> v[i].pos >> v[i].cost >> v[i].rad;
}
cout << rec(n - 1, K) << " ";
for(int i = n - 1; i >= 0; i--) {
if(K >= 0) {
if(visited[i][K]) {
for(int j = max(0, v[i].pos - v[i].rad); j <= min(M - 1, v[i].pos + v[i].rad - 1); j++) {
upaleni_kandelabri[j] = 1;
}
K -= v[i].cost;
}
}
}
upaleni_kandelabri[0] = 1;
int result = 0;
for(int i = 1; i < M; i++) {
if(upaleni_kandelabri[i] == 0) {
upaleni_kandelabri[i] = upaleni_kandelabri[i - 1] + 1;
result = max(result, upaleni_kandelabri[i]);
}
else {
upaleni_kandelabri[i] = 0;
}
result = max(result, upaleni_kandelabri[i]);
}
cout << result << endl;
return 0;
}