program sushi
implicit none

integer(8) :: i,j,k
integer(8) :: n,c
integer(8) :: x(200000)=0,v(200000)=0
integer(8) :: v_sum_a(200000)=0,v_sum_b(200000)=0
integer(8) :: ans1=0,ans2=0,ans3=0,ans4=0
integer(8) :: ans2_a(0:200000)=0,ans2_b(0:200000)=0,ans4_a(0:200000)=0,ans4_b(0:200000)=0
integer(8) :: val=0,ans2_best=0,ans4_best=0,ans=0

read(*,*) n,c

do i= 1,n
	read(*,*) x(i),v(i)
enddo

!時計周りに回した時のカロリー累積和
do i=1,n
	if(i == 1) then
		v_sum_a(i) = v(1)
	else
		v_sum_a(i) = v_sum_a(i-1) + v(i)
	endif
enddo

!反時計周りに回した時のカロリー累積和
do i=n,1,-1
	if(i == n) then
		v_sum_b(i) = v(n)
	else
		v_sum_b(i) = v_sum_b(i+1) + v(i)
	endif
enddo



!ans1 : 時計回りに進んで終了
do i=1,n
	ans1 = max(ans1,v_sum_a(i)-x(i))
enddo

!ans2 : 時計回りに進んでから、反時計回りに戻る
!まずは時計回りの最適値を求める。
!1～i番目の寿司の間で自由に取れて原点まで戻ったときの、カロリーの最大値
do i = 1,n
	val = v_sum_a(i) - 2 * x(i)
	ans2_a(i) = max(ans2_a(i-1),val)
enddo

!反時計周りでi～nまで取れるときの最大値
do i=n,1,-1
	val = v_sum_b(i) - (c - x(i))
	ans2_b(i) = max(ans2_b(i+1),val)
enddo

do i=0,n
	val = ans2_a(i) + ans2_b(i+1)
	ans2 = max(ans2,val)
enddo

!ans3 : 反時計回りに進んで終了
do i=1,n
	ans3 = max(ans3,v_sum_b(i)-(c-x(i)))
enddo

!ans4 : 反時計回りに進んでから、時計回りに戻る
!まずは時計回りの最適値を求める。
do i = 1,n
	val = v_sum_a(i) - x(i)
	ans4_a(i) = max(ans4_a(i-1),val)
enddo

!反時計周りでi～nまで取れるときの最大値
do i=n,1,-1
	val = v_sum_b(i) - 2 * (c - x(i))
	ans4_b(i) = max(ans4_b(i+1),val)
enddo

do i=0,n
	val = ans4_a(i) + ans4_b(i+1)
	ans4 = max(ans4,val)
enddo

ans = max(ans2,ans4)
write(*,*) ans

end program