Buggy python submission (verdict: Time Limit Exceeded):
#95d
N,C = map(int, input().split())

#左右の折り返し毎に計算すると　2**(N-1) で地球爆発。
#折り返しは無駄なので1回のみにする
#∴折り返し点、N通りの計算のみでOK


#入力を読み込みつつ、時計回りの移動のカロリーを計算
xv_list = [(0,0)]
total_cal_list_cw = [0] #時計回りに進んだ時のカロリーリスト

for i in range(1,N+1):
    x,v = map(int, input().split())
    xv_list.append((x,v))
    total_cal_list_cw.append(total_cal_list_cw[i-1] + v - x + xv_list[i-1][0])


#半時計回り移動のカロリーを計算
total_cal_list_acw = [0]
rev_xv_list = [(0,0)] + [(C - xv[0],xv[1]) for xv in xv_list[:-(N+1):-1]] #xvを逆順にして、xは原点から反時計回り時の距離にする

for i in range(1,N+1):
    x,v = rev_xv_list[i][0],rev_xv_list[i][1]
    total_cal_list_acw.append(total_cal_list_acw[i-1] + v - x + rev_xv_list[i-1][0])

#print("xv_list")
#print(xv_list)
#print("rev_xv_list")
#print(rev_xv_list)
#print("cw_cal_list")
#print(total_cal_list_cw)
#print("acw_cal_list")
#print(total_cal_list_acw)

ans = 0

for i in range(1,N+1):
    #print("i:",i)
    #print("###CLOCKWISE")
    #先に時計回りをする場合
    #print("cw:",total_cal_list_cw[i])
    #折り返さない場合
    if ans < total_cal_list_cw[i]:
        ans = total_cal_list_cw[i]
    #折り返す場合
    total_cal = total_cal_list_cw[i] - xv_list[i][0] #原点まで戻る
    #print("back to origin:",xv_list[i][0])
    #print("acw:",max(total_cal_list_acw[:N+1-i]))
    total_cal += max(total_cal_list_acw[:N+1-i]) #反時計回りで最大取れるところまで進む。ただし探索範囲は折り返し地点の前まで
    #print("total_cal",total_cal)
    
    if ans < total_cal:
        ans = total_cal
    
    #print("###ANTI CLOCKWISE")
    #先に反時計回りをする場合
    #print("acw:",total_cal_list_acw[i])
    #折り返さない場合
    if ans < total_cal_list_acw[i]:
        ans = total_cal_list_acw[i]
    #折り返す場合
    total_cal = total_cal_list_acw[i] - rev_xv_list[i][0] #原点まで戻る
    #print("back to origin:",rev_xv_list[i][0])
    #print("cw:",max(total_cal_list_cw[:N+1-i]))
    total_cal += max(total_cal_list_cw[:N+1-i]) #反時計回りで最大取れるところまで進む。ただし探索範囲は折り返し地点の前まで
    #print("total_cal",total_cal)
    
    if ans < total_cal:
        ans = total_cal
        
print(ans)

Fixed submission:
#95d　高速化・整理
N,C = map(int, input().split())

#左右の折り返し毎に計算すると　2**(N-1) で地球爆発する。折り返しは無駄なので1回のみにする。
#すると、折り返し点N通り、時計回り・反時計回り2通り、計2Nの計算でOKとなる

#入力を読み込みつつ、時計回りの移動のカロリーを計算
xv_list = [(0,0)]
total_cal_list_cw = [0] #時計回りに進んだ時のカロリーリスト
max_total_cal_list_cw = [0] #時計回りに進んだ時、i以下最大のカロリーリスト
max_total_cal_cw = 0

for i in range(1,N+1): #10**5
    x,v = map(int, input().split())
    xv_list.append((x,v))
    total_cal_cw = total_cal_list_cw[i-1] + v - x + xv_list[i-1][0]
    total_cal_list_cw.append(total_cal_cw)
    
    if max_total_cal_cw < total_cal_cw:
        max_total_cal_cw = total_cal_cw
        
    max_total_cal_list_cw.append(max_total_cal_cw)

#半時計回り移動のカロリーを計算
rev_xv_list = [(0,0)] + [(C - xv[0],xv[1]) for xv in xv_list[:-(N+1):-1]] #xv_kistを逆順に読み込み、xは原点から反時計回り時の距離にする
total_cal_list_acw = [0] #反時計回り時のカロリーリスト。以下同様。
max_total_cal_list_acw = [0]
max_total_cal_acw = 0

for i in range(1,N+1): #10**5
    x,v = rev_xv_list[i][0],rev_xv_list[i][1]
    total_cal_acw = total_cal_list_acw[i-1] + v - x + rev_xv_list[i-1][0]
    total_cal_list_acw.append(total_cal_acw)
    
    if max_total_cal_acw < total_cal_acw:
        max_total_cal_acw = total_cal_acw
    
    max_total_cal_list_acw.append(max_total_cal_acw)    

    
#準備ができたので、最大に摂取できるカロリーを求める。
ans = 0

for i in range(1,N+1): #10**5
    #a.先に時計回りをする場合
    #折り返さない場合
    if ans < total_cal_list_cw[i]:
        ans = total_cal_list_cw[i]
    #折り返す場合
    total_cal = total_cal_list_cw[i] - xv_list[i][0] #原点まで戻る
    if total_cal > 0:
        total_cal += max_total_cal_list_acw[N-i]
        if ans < total_cal:
            ans = total_cal
    
    #b.先に反時計回りをする場合
    #折り返さない場合
    if ans < total_cal_list_acw[i]:
        ans = total_cal_list_acw[i]
    #折り返す場合
    total_cal = total_cal_list_acw[i] - rev_xv_list[i][0] #原点まで戻る
    if total_cal > 0:
        total_cal += max_total_cal_list_cw[N-i]
        if ans < total_cal:
            ans = total_cal
        
print(ans)