#include<bits/stdc++.h>

using namespace std;


struct node{
	long long l, r, val;
}a[1111111];

long long sum[1111111];
long long maxf[1111111];
long long maxp[1111111];
int cmp1(node x, node y){
	return x.l < y.l;
}

int cmp2(node x, node y){
	return x.r < y.r;
}

int main(){
	long long n, c;
	scanf("%lld%lld", &n, &c);
	for(int i = 1; i <= n; i++){
		scanf("%lld%lld",&a[i].l, &a[i].val);
		a[i].r = c - a[i].l;
	}
	sort(a + 1, a + n + 1, cmp1);
	for(int i = 1; i <= n; i++){
		maxf[i] = max(sum[i - 1] - a[i].l + a[i - 1].l + a[i].val, sum[i - 1]);
		sum[i] = sum[i - 1] - a[i].l + a[i - 1].l + a[i].val;
	}
	
	/*sort(sum + 1, sum + n + 1);
	long long maxv = sum[n - 1];
	sort(a + 1, a + n + 1, cmp2);
	for(int i = 1; i <= n; i++){
		sum[i] = sum[i - 1] - a[i].r + a[i - 1].r + a[i].val;
	}
	sort(sum + 1, sum + n + 1);
	maxv = max(maxv , sum[n - 1]);
	printf("%lld\n", maxv);
	*/
	long long maxv = -0x3f3f3f3f;
	sort(a + 1, a + n + 1, cmp2);
	for(int i = 1; i <= n; i ++ ){
		sum[i] = sum[i - 1] - a[i].r + a[i - 1].r + a[i].val;
		maxp[i] = max(sum[i], sum[i - 1]);
	}
	for(int i = 1; i <= n; i++){
		maxv = max(maxv, max(maxf[i] + maxp[n - i] - a[n - i + 1].l, maxf[i]));
		maxv = max(maxv, max(maxp[i] + maxf[n - i] - a[i].r, maxp[i]));
		//printf("%lld+++\n", maxv);
	}
	printf("%lld\n", maxv);
