RT
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int MAXn = 1e5;
const int INF = 0x3f3f3f3f3f3f3f3f;
template <typename T>
inline void read(T &a) {
char c;for (c = getchar(); (c < '0' || c > '9') && c != '-'; c = getchar());bool f = c == '-';T x = f ? 0 : (c ^ '0');for (c = getchar(); c >= '0' && c <= '9'; c = getchar()) {x = x * 10 + (c ^ '0');}a = f ? -x : x;
}
template <typename T, typename ...Argv>
inline void read(T &a, Argv &...argv) {
read(a), read(argv...);
}
int le[MAXn * 4 + 10], ri[MAXn * 4 + 10], add[MAXn * 4 + 10], mn[MAXn * 4 + 10];
#define ls (id << 1)
#define rs (id << 1 | 1)
inline void pushup(int id) {
mn[id] = min(mn[ls], mn[rs]);
}
inline void pushdown(int id) {
mn[ls] = mn[ls] + add[id];
mn[rs] = mn[rs] + add[id];
add[ls] = add[ls] + add[id];
add[rs] = add[rs] + add[id];
add[id] = 0;
}
void Build0(int id, int l, int r) {
if (l > r) return;
le[id] = l;
ri[id] = r;
if (l == r) {
;
} else {
int mid = (l + r) >> 1;
Build0(ls, l, mid);
Build0(rs, mid + 1, r);
}
}
void Add(int id, int l, int r, int k) {
if (l > r) return;
if (le[id] >= l && ri[id] <= r) {
mn[id] = mn[id] + k;
add[id] = add[id] + k;
} else {
pushdown(id);
int mid = (le[id] + ri[id]) >> 1;
if (l <= mid) Add(ls, l, r, k);
if (r > mid) Add(rs, l, r, k);
pushup(id);
}
}
int Eva(int id, int l, int r) {
if (l > r) return INF;
if (le[id] >= l && ri[id] <= r) {
return mn[id];
} else {
pushdown(id);
int mid = (le[id] + ri[id]) >> 1, ans = INF;
if (l <= mid) ans = Eva(ls, l, r);
if (r > mid) ans = min(ans, Eva(rs, l, r));
return ans;
}
}
#undef ls
#undef rs
int n, W, d[MAXn + 10], sumw[MAXn + 10];
struct Ele {
int h, idx;
}stk[MAXn + 10]; int top;
int l;
signed main() {
read(n, W);
Build0(1, 1, n);
for (int i = 1, h, w; i <= n; ++i) {
read(h, w); sumw[i] = sumw[i - 1] + w;
while (l < i && sumw[l] < sumw[i] - W) ++l;
while (top && stk[top].h <= h) {
Add(1, stk[top - 1].idx, stk[top].idx - 1, h - stk[top].h);
--top;
}
stk[++top] = Ele{h: h, idx: i};
Add(1, i - 1, i - 1, h);
d[i] = Eva(1, l, i - 1);
Add(1, i, i, d[i]);
}
printf("%lld\n", d[n]);
return 0;
}