#include <bits/stdc++.h>
using namespace std;
const int maxn = 3e5 + 10;
const long long inf = 1e18 + 10;
int n, L;
int x[maxn], d[maxn], t[maxn], p[maxn];
int id[maxn];
int pai[maxn], edge[maxn];
bool mark[maxn], is[maxn];
long long dist[maxn];
vector<pair<pair<long long, int>, int>> grafo[maxn];
void dijkstra(void) {
  for (int i = 1; i < maxn; i++) dist[i] = inf;
  priority_queue<pair<long long, int>, vector<pair<long long, int>>,
                 greater<pair<long long, int>>>
      fila;
  dist[1] = 0, fila.push({0, 1});
  while (!fila.empty()) {
    int u = fila.top().second;
    fila.pop();
    if (mark[u]) continue;
    mark[u] = 1;
    for (auto pp : grafo[u]) {
      int v = pp.first.first;
      long long w = pp.first.second;
      if (dist[v] > dist[u] + w) {
        dist[v] = dist[u] + w, pai[v] = u, edge[v] = pp.second;
        fila.push({dist[v], v});
      }
    }
  }
}
int main(void) {
  scanf("%d %d", &n, &L);
  vector<int> V;
  V.push_back(0), V.push_back(L);
  map<int, int> mp;
  mp[0] = 0, mp[L] = 0;
  for (int i = 1; i <= n; i++) {
    scanf("%d %d %d %d", &x[i], &d[i], &t[i], &p[i]);
    mp[x[i]] = 0;
    V.push_back(x[i]);
    if (x[i] - p[i] >= 0) {
      mp[x[i] - p[i]] = mp[x[i] + d[i]] = 0;
      V.push_back(x[i] - p[i]), V.push_back(x[i] + d[i]);
    }
  }
  int aux = 0;
  for (auto &x : mp) x.second = ++aux;
  for (int i = 1; i <= n; i++)
    if (x[i] - p[i] >= 0)
      grafo[mp[x[i] - p[i]]].push_back({{mp[x[i] + d[i]], p[i] + t[i]}, i});
  sort(V.begin(), V.end());
  for (int i = 0; i < V.size(); i++) {
    if (i > 0) grafo[mp[V[i]]].push_back({{mp[V[i - 1]], V[i] - V[i - 1]}, 0});
    if (i < V.size() - 1)
      grafo[mp[V[i]]].push_back({{mp[V[i + 1]], V[i + 1] - V[i]}, 0});
  }
  dijkstra();
  memset(mark, 0, sizeof mark);
  int v = mp[L];
  vector<int> ans;
  while (v != 1) {
    if (edge[v]) is[edge[v]] = 1, ans.push_back(edge[v]);
    v = pai[v];
  }
  int qtd = 0;
  for (int i = 1; i <= n; i++)
    if (is[i]) qtd++;
  reverse(ans.begin(), ans.end());
  printf("%lld\n%d\n", dist[mp[L]], qtd);
  for (auto x : ans) {
    if (!mark[x]) {
      printf("%d ", x);
      mark[x] = 1;
    }
  }
  printf("\n");
}
