#include <bits/stdc++.h>
using namespace std;
const double EPS = 10e-8;
const int MAX = 100005;
const int INF = 1 << 30;
int n, l;
vector<int> p;
int x[MAX], d[MAX], t[MAX], q[MAX], id[MAX];
vector<pair<int, int> > G[2 * MAX];
vector<int> mark[2 * MAX];
int dist[2 * MAX];
pair<int, int> prev_node[2 * MAX];
int main(int argc, char **argv) {
  scanf("%d %d", &n, &l);
  p.push_back(0);
  p.push_back(l);
  int count = 0;
  for (int i = 0; i < n; i++) {
    scanf("%d %d %d %d", &x[i], &d[i], &t[i], &q[i]);
    id[i] = count++;
    if (x[i] - q[i] < 0) {
      n--;
      i--;
      continue;
    }
    p.push_back(x[i] - q[i]);
    p.push_back(x[i] + d[i]);
  }
  sort(p.begin(), p.end());
  p.erase(unique(p.begin(), p.end()), p.end());
  for (int i = 0; i + 1 < int(p.size()); i++) {
    G[i].push_back(make_pair(i + 1, p[i + 1] - p[i]));
    mark[i].push_back(-1);
    G[i + 1].push_back(make_pair(i, p[i + 1] - p[i]));
    mark[i + 1].push_back(-1);
  }
  for (int i = 0; i < n; i++) {
    int u = lower_bound(p.begin(), p.end(), x[i] - q[i]) - p.begin();
    int v = lower_bound(p.begin(), p.end(), x[i] + d[i]) - p.begin();
    G[u].push_back(make_pair(v, q[i] + t[i]));
    mark[u].push_back(id[i]);
  }
  int m = p.size();
  for (int i = 0; i < m; i++) {
    dist[i] = INF;
  }
  dist[0] = 0;
  priority_queue<pair<int, int> > Q;
  Q.push(make_pair(0, 0));
  while (!Q.empty()) {
    pair<int, int> top = Q.top();
    Q.pop();
    int u = top.second;
    int d = -top.first;
    if (dist[u] < d) {
      continue;
    }
    for (int i = 0; i < int(G[u].size()); i++) {
      int v = G[u][i].first;
      int nd = d + G[u][i].second;
      if (nd < dist[v]) {
        dist[v] = nd;
        prev_node[v] = make_pair(u, mark[u][i]);
        Q.push(make_pair(-nd, v));
      }
    }
  }
  printf("%d\n", dist[m - 1]);
  vector<int> ramps;
  int u = m - 1;
  while (u > 0) {
    int r = prev_node[u].second;
    int v = prev_node[u].first;
    if (r != -1) {
      ramps.push_back(r);
    }
    u = v;
  }
  printf("%d\n", int(ramps.size()));
  reverse(ramps.begin(), ramps.end());
  for (int i = 0; i < int(ramps.size()); i++) {
    printf("%d\n", ramps[i] + 1);
  }
  return EXIT_SUCCESS;
}
