#include <bits/stdc++.h>
const int maxx = 1e5 + 20;
const int inf = 1e9 + 20;
using namespace std;
map<int, vector<pair<pair<int, int>, int> > > adj;
set<pair<int, int> > sb;
set<int> vertex;
int l, n, m, v1, v2;
map<int, int> d;
map<int, pair<int, int> > dad;
void f(int x) {
  if (x == 0) {
    cout << m << endl;
    return;
  }
  if (dad[x].second != -1) m++;
  f(dad[x].first);
  if (dad[x].second != -1) cout << dad[x].second + 1 << " ";
}
int main() {
  int i, j;
  ios::sync_with_stdio(false);
  cin >> n >> l;
  if (n == 0) {
    cout << l << endl << 0;
    return 0;
  }
  adj[0].push_back(make_pair(make_pair(l, l), -1));
  for (i = 0; i < n; i++) {
    int x, d, t, p;
    cin >> x >> d >> t >> p;
    if (x >= p) {
      vertex.insert(x - p);
      vertex.insert(x + d);
      adj[x - p].push_back(make_pair(make_pair(x + d, p + t), i));
    }
  }
  vertex.insert(0);
  vertex.insert(l);
  while (vertex.size()) {
    int w = *vertex.begin();
    vertex.erase(vertex.begin());
    int e = *vertex.begin();
    adj[w].push_back(make_pair(make_pair(e, abs(e - w)), -1));
    adj[e].push_back(make_pair(make_pair(w, abs(e - w)), -1));
  }
  d[0] = 0;
  dad[0] = make_pair(-1, -1);
  sb.insert(make_pair(0, 0));
  while (sb.size()) {
    int x = sb.begin()->second, i = sb.begin()->first;
    sb.erase(sb.begin());
    for (j = 0; j < adj[x].size(); j++) {
      pair<pair<int, int>, int> y = adj[x][j];
      int e1 = y.first.first, e2 = y.first.second, e3 = y.second;
      if (d[e1] == 0 || d[e1] > d[x] + e2) {
        sb.erase(make_pair(d[e1], e1));
        d[e1] = d[x] + e2;
        dad[e1] = make_pair(x, e3);
        sb.insert(make_pair(d[e1], e1));
      }
    }
  }
  cout << d[l] << endl;
  f(l);
  return 0;
}
