#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;
  }
  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);
}
