#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; }