n, @c = gets.strip.split.map(&:to_i)
sushis = []
n.times do
  sushis << gets.strip.split.map(&:to_i)
end

def search(sushis, x0)
  if sushis.empty?
    # 食べ尽くした場合
    return 0
  end

  # 次に時計回りで隣りにある寿司を食べる場合
  x1, v1 = sushis[0]
  d1 = (x1 > x0) ? (x1 - x0) : (x1 + @c - x0)
  a = (v1 - d1) + search(sushis[1..-1], x1)

  # 次に反時計回りで隣りにある寿司を食べる場合
  x2, v2 = sushis[-1]
  d2 = (x2 > x0) ? (x0 + @c - x2) : (x0 - x2)
  b = (v2 - d2) + search(sushis[0..-2], x2)

  return [a, b, 0].max

end

puts search(sushis, 0)
