#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:65000000")
using namespace std;
vector<pair<int, pair<int, int> > > gr[300013];
vector<int> a;
int n, L;
long long D[300013];
pair<int, int> pr[300013];
map<int, int> vertices;
int main() {
  memset(pr, -1, sizeof(pr));
  cin >> n >> L;
  int x, d, t, p;
  int k = 0;
  a.push_back(0);
  a.push_back(L);
  for (int i = 1; i <= n; i++) {
    cin >> x >> d >> t >> p;
    if (x - p >= 0) {
      if (vertices.find(x - p) == vertices.end()) {
        k++;
        vertices[x - p] = k;
      }
      if (vertices.find(x + d) == vertices.end()) {
        k++;
        vertices[x + d] = k;
      }
      gr[vertices[x - p]].push_back(
          make_pair(vertices[x + d], make_pair(p + t, i)));
      a.push_back(x - p);
      a.push_back(x + d);
    }
  }
  sort(a.begin(), a.end());
  for (int i = 1; i < a.size(); i++) {
    if (vertices.find(a[i]) == vertices.end()) {
      k++;
      vertices[a[i]] = k;
    }
    if (vertices.find(a[i - 1]) == vertices.end()) {
      k++;
      vertices[a[i - 1]] = k;
    }
    gr[vertices[a[i]]].push_back(
        make_pair(vertices[a[i - 1]], make_pair(a[i] - a[i - 1], -1)));
  }
  for (int i = 0; i < a.size() - 1; i++) {
    if (vertices.find(a[i]) == vertices.end()) {
      k++;
      vertices[a[i]] = k;
    }
    if (vertices.find(a[i + 1]) == vertices.end()) {
      k++;
      vertices[a[i + 1]] = k;
    }
    gr[vertices[a[i]]].push_back(
        make_pair(vertices[a[i + 1]], make_pair(a[i + 1] - a[i], -1)));
  }
  fill(D + 1, D + 300000, 1000000000000000000);
  D[vertices[0]] = 0;
  priority_queue<pair<long long, int> > q;
  q.push(make_pair(0, vertices[0]));
  while (!q.empty()) {
    int v = q.top().second, cur_v = -q.top().first;
    q.pop();
    if (cur_v > D[v]) continue;
    for (int i = 0; i < gr[v].size(); i++) {
      int to = gr[v][i].first, len = gr[v][i].second.first;
      int fl = gr[v][i].second.second;
      if (D[to] > D[v] + len) {
        D[to] = D[v] + len;
        q.push(make_pair(-D[to], to));
        pr[to].first = v;
        pr[to].second = fl;
      }
    }
  }
  cout << D[vertices[L]] << endl;
  vector<int> path;
  for (int i = vertices[L]; i != -1; i = pr[i].first) {
    if (pr[i].second != -1) {
      path.push_back(pr[i].second);
    }
  }
  reverse(path.begin(), path.end());
  cout << path.size() << endl;
  for (int i = 0; i < path.size(); i++) {
    cout << path[i] << " ";
  }
  return 0;
}
