#include <bits/stdc++.h>
long long my_m = 0;
long long q_y[100000 + 1000];
long long q_z[100000 + 1000];
long long x[100000 + 1000];
long long v[100000 + 1000];
long long my_max(long long a, long long b) { return a > b ? a : b; }
int main() {
  int N;
  long long C;
  scanf("%d %lld", &N, &C);
  for (int i = 0; i < N; i++) scanf("%lld %lld", &x[i], &v[i]);
  long long sum = 0;
  long long my_ma = 0;
  for (int i = 0; i < N; i++) {
    sum += (v[i] - x[i]);
    my_ma = my_max(my_ma, sum);
    q_y[i] = my_ma;
    my_m = my_max(my_m, my_ma);
  }
  sum = 0;
  my_ma = 0;
  for (int i = N - 1; i >= 0; i--) {
    if (i == N - 1)
      sum += (v[i] - (C - x[i]));
    else
      sum += (v[i] - (x[i + 1] - x[i]));
    my_ma = my_max(my_ma, sum);
    q_z[i] = my_ma;
    my_m = my_max(my_m, my_ma);
  }
  sum = 0;
  for (int i = 0; i < N - 1; i++) {
    sum += (v[i] - 2 * x[i]);
    my_m = my_max(my_m, sum + q_z[i + 1]);
  }
  sum = 0;
  for (int i = N - 1; i > 0; i--) {
    if (i == N - 1)
      sum += (v[i] - 2 * (C - x[i]));
    else
      sum += (v[i] - 2 * (x[i + 1] - x[i]));
    my_m = my_max(my_m, sum + q_y[i - 1]);
  }
  printf("%lld\n", my_m);
  return 0;
}
