#include <bits/stdc++.h>
const int MAXN = 200000 + 10;
const int MAXM = 600000 + 10;
int n, l;
int num[MAXN], numn;
int pre[MAXM], from[MAXM], to[MAXM], wdis[MAXM], wn[MAXM], head[MAXN], wcnt;
int ex[MAXN], ed[MAXN], et[MAXN], ep[MAXN];
int dis[MAXN], mark[MAXN];
int stk[MAXN], stop;
struct Node {
  int p, dis;
  Node() {}
  Node(int _p, int _dis) {
    p = _p;
    dis = _dis;
  }
  void operator=(const Node b) {
    p = b.p;
    dis = b.dis;
  }
  bool operator<(const Node b) const { return dis > b.dis; }
};
inline int id(int x) {
  return std::lower_bound(num + 1, num + 1 + numn, x) - num;
}
inline void addedge(int u, int v, int w, int no = 0) {
  wcnt++;
  pre[wcnt] = head[u];
  head[u] = wcnt;
  from[wcnt] = u;
  to[wcnt] = v;
  wdis[wcnt] = w;
  wn[wcnt] = no;
}
void dijkstra() {
  static std::priority_queue<Node> pq;
  int i, u, v;
  Node unode;
  memset(dis, 0x3f, sizeof(dis));
  dis[1] = 0;
  pq.push(Node(1, 0));
  while (!pq.empty()) {
    unode = pq.top();
    pq.pop();
    u = unode.p;
    if (dis[u] ^ unode.dis) continue;
    for (i = head[u]; i; i = pre[i]) {
      v = to[i];
      if (dis[u] + wdis[i] < dis[v]) {
        dis[v] = dis[u] + wdis[i];
        mark[v] = i;
        pq.push(Node(v, dis[v]));
      }
    }
  }
}
int main() {
  int i, cnt = 0;
  scanf("%d %d", &n, &l);
  numn = 2;
  num[1] = 0;
  num[2] = l;
  for (i = 1; i <= n; i++) {
    scanf("%d %d %d %d", &ex[i], &ed[i], &et[i], &ep[i]);
    if (ex[i] - ep[i] >= 0) {
      numn++;
      num[numn] = ex[i] - ep[i];
      numn++;
      num[numn] = ex[i] + ed[i];
    }
  }
  std::sort(num + 1, num + 1 + numn);
  numn = std::unique(num + 1, num + 1 + numn) - num - 1;
  for (i = 1; i < numn; i++) {
    addedge(i, i + 1, num[i + 1] - num[i]);
    addedge(i + 1, i, num[i + 1] - num[i]);
  }
  for (i = 1; i <= n; i++)
    if (ex[i] - ep[i] >= 0)
      addedge(id(ex[i] - ep[i]), id(ex[i] + ed[i]), ep[i] + et[i], i);
  dijkstra();
  printf("%d\n", dis[numn]);
  for (i = numn; mark[i]; i = from[mark[i]])
    if (wn[mark[i]]) cnt++;
  printf("%d\n", cnt);
  for (i = numn; mark[i]; i = from[mark[i]])
    if (wn[mark[i]]) stk[++stop] = wn[mark[i]];
  while (stop) printf("%d ", stk[stop--]);
  putchar('\n');
  return 0;
}
