#include <bits/stdc++.h>
using namespace std;
const long double EPS = 1E-9;
const int INF = (int)1E9;
const long long INF64 = (long long)1E18;
const long double PI = 2 * acos(.0);
int n, l, cont = 2;
long long resp[250010];
int path[250010];
int flag[250010];
vector<pair<int, int> > gr[250010];
vector<pair<int, int> > idt[250010];
map<int, int> mapa;
long long DJ(int source, int target) {
  for (int i = 0; i < (int)(250010); i++) resp[i] = INF64;
  memset(path, -1, sizeof(path));
  memset(flag, -1, sizeof(flag));
  resp[source] = 0;
  priority_queue<pair<int, long long> > cola;
  cola.push(make_pair(-resp[source], source));
  while (cola.size()) {
    int nodo = cola.top().second;
    cola.pop();
    if (nodo == target) return resp[nodo];
    for (int i = 0; i < (int)((gr[nodo]).size()); i++) {
      if (gr[nodo][i].second + resp[nodo] < resp[gr[nodo][i].first]) {
        resp[gr[nodo][i].first] = gr[nodo][i].second + resp[nodo];
        path[gr[nodo][i].first] = nodo;
        if (idt[nodo][i].second != -1)
          flag[gr[nodo][i].first] = idt[nodo][i].second;
        else
          flag[gr[nodo][i].first] = -1;
        cola.push(make_pair(-resp[gr[nodo][i].first], gr[nodo][i].first));
      }
    }
  }
  return -1;
}
int ss;
int conta = 0;
void countPath(int x) {
  if (x == ss) return;
  countPath(path[x]);
  if (flag[x] != -1) conta++;
  return;
}
void printPath(int x) {
  if (x == ss) return;
  printPath(path[x]);
  if (flag[x] != -1) cout << flag[x] << " ";
  return;
}
int main() {
  cin >> n >> l;
  int x, d, t, pp, fromA, toB;
  set<int> posi;
  cont = 1;
  for (int i = 0; i < (int)(n); i++) {
    cin >> x >> d >> t >> pp;
    if (x - pp < 0) continue;
    if (mapa[x - pp] == 0) mapa[x - pp] = cont++;
    if (mapa[x + d] == 0) mapa[x + d] = cont++;
    fromA = mapa[x - pp];
    toB = mapa[x + d];
    gr[fromA].push_back(make_pair(toB, t + pp));
    idt[fromA].push_back(make_pair(toB, i + 1));
    posi.insert(x - pp);
    posi.insert(x + d);
  }
  posi.insert(0);
  posi.insert(l);
  set<int>::iterator p = posi.begin();
  set<int>::iterator pm = p;
  int n = (posi).size();
  int ind = 0;
  if (mapa[0] == 0) mapa[0] = cont++;
  if (mapa[l] == 0) mapa[l] = cont++;
  while (p != posi.end()) {
    fromA = mapa[*p];
    if (ind != 0) {
      pm = p;
      pm--;
      gr[fromA].push_back(make_pair(mapa[*(pm)], *p - *(pm)));
      idt[fromA].push_back(make_pair(mapa[*(pm)], -1));
    }
    if (ind != n - 1) {
      pm = p;
      pm++;
      gr[fromA].push_back(make_pair(mapa[*(pm)], *(pm) - *p));
      idt[fromA].push_back(make_pair(mapa[*(pm)], -1));
    }
    ind++;
    p++;
  }
  int source = mapa[0];
  int target = mapa[l];
  mapa.clear();
  cout << DJ(source, target) << endl;
  ss = source;
  countPath(target);
  cout << conta << endl;
  if (conta > 0) {
    printPath(target);
    cout << endl;
  }
  return 0;
}
