阿里马马与四十大盗
题号:NC265918
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

阿里马马偷偷溜进了盗贼的宝库,拿走了他们的财宝。但是在离开时,他不小心触发了机关,原本平整的地面出现了各种陷阱。阿里马马需要抓紧逃走,不然就会被赶来的盗贼抓住,快来帮帮他吧!
阿里马马的逃跑路线是一条直线,需要从坐标为 \mathrm{1} 的藏宝库逃到坐标为 \mathrm{n} 的出口,他每次只能移动到相邻的坐标,每次移动需要花费 \mathrm{1} 单位时间,在这条路线中,任意坐标 \mathrm{i} 上都有一个数字 \mathrm{a_i}

  • \mathrm{a_i=0} 时,表示此处为安全区,可以选择在此处疗伤,恢复生命值直至上限额外花费的时间与恢复的生命值大小相同)或 不恢复生命值,继续前行(无额外花费时间)。请注意,疗伤过程一旦中途停止就会功亏一篑,所以不存在恢复部分生命值的情况。
  • \mathrm{a_i>0} 时,表示此处为陷阱,\mathrm{a_i} 的值即为通过此处损失的生命值。

已知阿里马马初始生命值为其生命值上限,且藏宝库与出口都为安全区 (\mathrm{a_1=a_n=0}),请判断阿里马马是否能够顺利逃走(逃跑途中生命值小于等于零视为逃跑失败),并计算逃跑需要的最短时间。

输入描述:

第一行为两个整数 \mathrm{n,m}(\mathrm{2 \le n \le 10^5},\mathrm{1 \le m \le 10^9}) 表示逃跑路线长度与阿里马马初始生命值。

下一行为 \mathrm{n} 个整数,第 \mathrm{i} 个数表示 \mathrm{a_i}(\mathrm{0 \le a_i \le 10^9,a_1=a_n=0}) 的值。

输出描述:

若阿里马马不能逃走,则输出 \mathrm{NO} ,否则输出他逃走需要花费的最短时间。
示例1

输入

复制
5 3
0 1 2 3 0

输出

复制
NO

说明

阿里马马的初始生命值为 3 ,显然 1+2+3>3 ,阿里马马不能逃脱。
示例2

输入

复制
5 8
0 6 0 6 0

输出

复制
10

说明

阿里马马初始生命值为 8 ,在到达坐标 2 时生命值变为 2 ,在坐标 3 选择恢复所有生命值(额外花费 6 单位时间),在坐标 4 生命值变为 2,最终到达坐标 5,其逃走所需要的最短时间为 6+4=10