use std::collections::VecDeque;
use std::io;
use std::str::FromStr;

fn main() {
    let mut input = String::new();
    io::stdin().read_line(&mut input).unwrap();
    let parts: Vec<usize> = input
        .trim()
        .split_whitespace()
        .map(|x| usize::from_str(x).unwrap())
        .collect();

    let n = parts[0];
    let _x = parts[1];

    input.clear();
    io::stdin().read_line(&mut input).unwrap();
    let mut a: Vec<usize> = input
        .trim()
        .split_whitespace()
        .map(|x| usize::from_str(x).unwrap())
        .collect();

    // Aを連結する
    let mut extended_a = a.clone();
    extended_a.extend(a);

    // Dequeの作成
    let mut deque = VecDeque::new();
    let mut total = 0;
    let mut ans = 0;

    for &item in &extended_a {
        deque.push_back(item);
        total += item;

        // 合計がxを超えたら先頭から要素を取り出す
        while total > _x || deque.len() > n{
            if let Some(front) = deque.pop_front() {
                total -= front;
            }
        }
        ans = std::cmp::max(ans,total);
    }

    // 最終的なDequeの内容を表示
    println!("{}", ans);
}