#include using namespace std; #define rep(i,n) for(long long i=0;i=0;--i) #define debug(output) if(debugFlag)cout<<#output<<"= "< P; const bool debugFlag=true; const lint linf=1.1e18;const lint inf=1.01e9; constexpr int MOD=1000000007; templatebool chmax(T &a, const T &b) { if(a < b){ a = b; return 1; } return 0; } templatebool chmin(T &a, const T &b) { if(a > b){ a = b; return 1; } return 0; } signed main(){ int n,d;cin>>n>>d; vector

a(n); rep(i,n)cin>>a[i].first>>a[i].second; auto judge=[&](int x)->bool{ vector dp(n,0); rep(i,n){ if(0-a[i].first nxt(n,-inf); vector l(n+1,-inf),r(n+1,-inf); rep1(i,n)l[i]=max(l[i-1],dp[i-1]); rrep(i,n-1)r[i]=max(r[i+1],dp[i+1]); rep(i,n){ if(l[i]-a[i].first>=x)nxt[i]=l[i]+a[i].second-a[i].first; if(r[i]-a[i].first>=x)nxt[i]=max(nxt[i],r[i]+a[i].second-a[i].first); } swap(dp,nxt); } auto it=max_element(dp.begin(),dp.end()); return *it!=-inf; }; int dd=-inf;int u=inf; while(u-dd>1){ int mid=(u+dd)/2; if(judge(mid))dd=mid; else u=mid; } cout<