#include <bits/stdc++.h>
using namespace std;
const int MAXN = 510;
struct Node {
  int w, s, v, l, r;
  friend bool operator<(const Node &a, const Node &b) {
    if (a.r == b.r)
      return a.l > b.l;
    else
      return a.r < b.r;
  }
} seg[MAXN];
int g[MAXN << 1];
int f[MAXN][MAXN << 1];
int n, S;
int main() {
  ios::sync_with_stdio(false);
  cin >> n >> S;
  for (int i = 1; i <= n; i++) {
    cin >> seg[i].l >> seg[i].r >> seg[i].w >> seg[i].s >> seg[i].v;
  }
  seg[n + 1].l = 0;
  seg[n + 1].r = n << 1;
  seg[n + 1].s = 0x7fffffff;
  n++;
  sort(seg + 1, seg + n + 1);
  for (int i = 1; i <= n; i++) {
    for (int j = seg[i].w; j <= S; j++) {
      int p = seg[i].l;
      memset(g, 0, sizeof g);
      for (int k = 1; k <= i - 1; k++) {
        if (seg[k].l >= seg[i].l) {
          while (p < seg[k].r) p++, g[p] = g[p - 1];
          g[seg[k].r] =
              max(g[seg[k].r], g[seg[k].l] + f[k][min(j - seg[i].w, seg[i].s)]);
        }
      }
      f[i][j] = g[p] + seg[i].v;
    }
  }
  cout << f[n][S] << endl;
  return 0;
}
