/*
これを入れて実行
g++ code.cpp
./a.out
 */
 
#include <iostream>
#include <stdio.h>
#include <vector>
#include <string>
#include <cstring>
#include <queue>
#include <deque>
#include <algorithm>
#include <utility>
#include <set>
#include <map>
#include <unordered_map>
#include <cmath>
#include <math.h>
#include <tuple>
#include <iomanip>
#include <bitset>
#include <functional>

#define all(x) (x).begin(),(x).end()
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
 
using namespace std;
typedef long long ll;
typedef long double ld;
 
int dy4[4] = {-1, 0, +1, 0};
int dx4[4] = {0, +1, 0, -1};
int dy8[8] = {-1, -1, 0, 1, 1, 1, 0, -1};
int dx8[8] = {0, 1, 1, 1, 0, -1, -1, -1};
 
const long long INF = 1LL << 62;
const ll MOD = 1e9 + 7;
 
bool greaterSecond(const pair<int, int>& f, const pair<int, int>& s){
    return f.second > s.second;
}
 
ll gcd(ll a, ll b){
	if (b == 0)return a;
	return gcd(b, a % b);
}
 
ll lcm(ll a, ll b){
    return a / gcd(a, b) * b;
}
 
ll nCr(ll n, ll r){
    if(r == 0 || r == n){
        return 1;
    } else if(r == 1){
        return n;
    }
    return (nCr(n - 1, r) + nCr(n - 1, r - 1));
}
 
ll nPr(ll n, ll r){
    r = n - r;
    ll ret = 1;
    for (ll i = n; i >= r + 1; i--) ret *= i;
    return ret;
}
 
//-----------------------ここから-----------
int main(void){
    ll n, c;
    cin >> n >> c;
    vector<pair<ll,ll>> sumc(n + 1, {0,0});
    vector<pair<ll,ll>> suma(n + 1, {0,0});

    vector<pair<ll,ll>> info(n);
    rep(i, n){
        cin >> info[i].first >> info[i].second;
    }
    rep(i, n){
        sumc[i + 1] = {info[i].first, info[i].second + sumc[i].second};
    }
    vector<pair<ll,ll>> rinfo;
    rinfo = info;
    reverse(all(rinfo));
    ll now = c;
    for(int i = 0; i < n; i++){
        suma[i + 1] = {suma[i].first + (now - rinfo[i].first), rinfo[i].second + suma[i].second};
        now = rinfo[i].first;
    }
    vector<pair<ll,ll>> bestc(n + 1, {0,0});
    vector<pair<ll,ll>> bestc2(n + 1, {0,0});
    ll best = 0;
    ll best2 = 0;
    pair<ll,ll> bestp = {0, 0};
    pair<ll,ll> best2p = {0, 0};
    for(int i = 0; i <= n; i++){
        if(best < sumc[i].second - sumc[i].first){
            best = sumc[i].second - sumc[i].first;
            bestp = {sumc[i].first, sumc[i].second};
        }
        if(best2 < sumc[i].second - sumc[i].first * 2){
            best2 = sumc[i].second - sumc[i].first * 2;
            best2p = {sumc[i].first * 2, sumc[i].second};
        }
        bestc[i] = bestp;
        bestc2[i] = best2p;
        //cout << i << " " << bestc[i].first << " " << bestc[i].second << endl;
    }
    ll ans = 0;
    for(int i = 0; i <= n; i++){
        //cout << i << " " << suma[i].second << " " << suma[i].first << "---" << bestc[n - i].second << " " << bestc[n - i].first << endl;
 
        ll tmp1 = suma[i].second - (suma[i].first * 2) + bestc[n - i].second - bestc[n - i].first;
        ll tmp2 = suma[i].second - suma[i].first + bestc2[n - i].second - bestc2[n - i].first;
        ll tmp = max(tmp1, tmp2);
        ans = max(ans, tmp);
        

    }

    for(int i = 0; i <= n; i++){
        ans = (max(ans, sumc[i].second - sumc[i].first));
    }

    cout << ans << endl;


}

Measured memory_bytes: 9600