#include <bits/stdc++.h>   using namespace std;   const int N = 505;   int n, in[N], out[N], w[N], s[N], v[N];   vector<int> st[N << 1];   int f1[N][N << 1], f2[N][N << 1];   int dfs(int x, int S) {     if (S < 0) return 0;     if (~f1[x][S]) return f1[x][S];     f2[x][out[x] + 1] = 0;     for (int i = out[x]; i >= in[x]; i--) {       f2[x][i] = f2[x][i + 1];       for (int j = 0; j < st[i].size(); j++) {         int p = st[i][j];         if (out[p] > out[x] || p == x) continue;         f2[x][i] = max(f2[x][i], dfs(p, min(S - w[p], s[p])) + f2[x][out[p]]);       }     }     return f1[x][S] = f2[x][in[x]] + v[x];   }   int main() {     int S;     scanf( %d%d , &n, &S);     for (int i = 1; i <= n; i++) {       scanf( %d%d%d%d%d , &in[i], &out[i], &w[i], &s[i], &v[i]);       st[in[i]].push_back(i);     }     memset(f1, -1, sizeof f1);     in[0] = 0;     out[0] = 2 * n + 1;     printf( %d n , dfs(0, S));     return 0;   }   