#include <bits/stdc++.h>
inline int read() {
  int ret;
  scanf("%d", &ret);
  return ret;
}
int dx8[8] = {1, 1, 0, -1, -1, -1, 0, 1};
int dy8[8] = {0, 1, 1, 1, 0, -1, -1, -1};
int dx4[4] = {1, 0, -1, 0};
int dy4[4] = {0, 1, 0, -1};
using namespace std;
struct Item {
  int w, s, in, out, v;
  friend bool operator<(const Item &a, const Item &b) {
    return a.in < b.in || a.in == b.in && a.out > b.out;
  }
} item[1234];
long long dp[1234 / 2][1234];
long long use[1234 / 2][1234];
int top = 1234 / 2;
int n;
long long DP(int i, int s) {
  if (dp[i][s] != -1) return dp[i][s];
  long long *mx = use[--top];
  memset(use[top], 0, sizeof use[top]);
  int start = item[i].in;
  long long mxv = mx[start];
  for (int j = i + 1; j < n; j++) {
    if (item[j].in >= item[i].out) break;
    while (start < item[j].in) mxv = max(mxv, mx[++start]);
    if (item[j].out <= item[i].out && s >= item[j].w) {
      long long tmp = DP(j, min(s - item[j].w, item[j].s));
      mx[item[j].out] = max(mx[item[j].out], mxv + tmp);
    }
  }
  while (start < item[i].out) mxv = max(mxv, mx[++start]);
  top++;
  return dp[i][s] = mxv + item[i].v;
}
int Main() {
  scanf("%d", &n);
  scanf("%d", &item[0].s);
  item[0].in = 0;
  item[0].out = 1111;
  item[0].v = 0;
  item[0].w = 0;
  for (int i = 1; i <= int(n); i++) {
    scanf("%d", &item[i].in);
    item[i].in++;
    scanf("%d", &item[i].out);
    item[i].out++;
    scanf("%d", &item[i].w);
    scanf("%d", &item[i].s);
    scanf("%d", &item[i].v);
  }
  n++;
  sort(item, item + n);
  memset(dp, -1ll, sizeof dp);
  cout << DP(0, item[0].s) << endl;
  return 0;
}
int main() { return Main(); }
