There is a river of width nn. The left bank of the river is cell 00 and the right bank is cell n+1n+1 (more formally, the river can be represented as a sequence of n+2n+2 cells numbered from 00 to n+1n+1). There are also mm wooden platforms on a river, the ii-th platform has length cici (so the ii-th platform takes cici consecutive cells of the river). It is guaranteed that the sum of lengths of platforms does not exceed nn.

You are standing at 00 and want to reach n+1n+1 somehow. If you are standing at the position xx, you can jump to any position in the range [x+1;x+d][x+1;x+d]. However you don't really like the water so you can jump only to such cells that belong to some wooden platform. For example, if d=1d=1, you can jump only to the next position (if it belongs to the wooden platform). You can assume that cells 00 and n+1n+1belong to wooden platforms.

You want to know if it is possible to reach n+1n+1 from 00 if you can move any platform to the left or to the right arbitrary number of times (possibly, zero) as long as they do not intersect each other (but two platforms can touch each other). It also means that you cannot change the relative order of platforms.

Note that you should move platforms until you start jumping (in other words, you first move the platforms and then start jumping).

For example, if n=7n=7, m=3m=3, d=2d=2 and c=[1,2,1]c=[1,2,1], then one of the ways to reach 88 from 00 is follow:

The first example: n=7n=7.

Input

The first line of the input contains three integers nn, mm and dd (1≤n,m,d≤1000,m≤n1≤n,m,d≤1000,m≤n) — the width of the river, the number of platforms and the maximum distance of your jump, correspondingly.

The second line of the input contains mm integers c1,c2,…,cmc1,c2,…,cm (1≤ci≤n,∑i=1mci≤n1≤ci≤n,∑i=1mci≤n), where cici is the length of the ii-th platform.

Output

If it is impossible to reach n+1n+1 from 00, print NO in the first line. Otherwise, print YES in the first line and the array aa of length nn in the second line — the sequence of river cells (excluding cell 00 and cell n+1n+1).

If the cell ii does not belong to any platform, aiai should be 00. Otherwise, it should be equal to the index of the platform (11-indexed, platforms are numbered from 11 to mm in order of input) to which the cell ii belongs.

Note that all aiai equal to 11 should form a contiguous subsegment of the array aa of length c1c1, all aiai equal to 22 should form a contiguous subsegment of the array aa of length c2c2, ..., all aiai equal to mm should form a contiguous subsegment of the array aa of length cmcm. The leftmost position of 22 in aa should be greater than the rightmost position of 11, the leftmost position of 33 in aa should be greater than the rightmost position of 22, ..., the leftmost position of mm in aa should be greater than the rightmost position of m−1m−1.

See example outputs for better understanding.

Examples
input

Copy
7 3 2
1 2 1
output

Copy
YES
0 1 0 2 2 0 3
input

Copy
10 1 11
1
output

Copy
YES
0 0 0 0 0 0 0 0 0 1
input

Copy
10 1 5
2
output

Copy
YES
0 0 0 0 1 1 0 0 0 0
Note

Consider the first example: the answer is [0,1,0,2,2,0,3][0,1,0,2,2,0,3]. The sequence of jumps you perform is 0→2→4→5→7→80→2→4→5→7→8.

Consider the second example: it does not matter how to place the platform because you always can jump from 00 to 1111.

Consider the third example: the answer is [0,0,0,0,1,1,0,0,0,0][0,0,0,0,1,1,0,0,0,0]. The sequence of jumps you perform is 0→5→6→110→5→6→11.

贪心,按最远的跳,再加上板子长度,判断是否能到河对岸。

如果能,尽量把板子放的远一点。

#include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + ;
int c[N],ans[N];
int main() {
ios_base::sync_with_stdio();
cin.tie();
cout.tie();
int n,m,d;
cin>>n>>m>>d;//n是宽度,m是板子数目,d是可以最多跳多远
int pos=;
for (int i=; i<=m; i++) {
pos+=d;//每次跳最远
int l;
cin>>l;
pos+=l-;
c[i]=l;//记录板子长度
}
pos+=d;//最后再跳一次
if (pos<n+) {//如果跳不过去
cout<<"NO";//就输出NO
return ;
}
cout<<"YES\n";
pos=;
int sum=;
for (int i=; i<=m; i++)
sum+=c[i];//板子总长度
for (int i=; i<=m; i++) {
if (pos+d+sum-<=n) pos+=d;
else pos=n-sum+;
for (int j=pos; j<=pos+c[i]-; j++)
ans[j]=i;
pos+=c[i]-;
sum-=c[i];
}
for (int i=; i<=n; i++)
cout<<ans[i]<<" ";
}

最新文章

  1. 神奇的BFC以及被忽略的东西
  2. JAVA GUI
  3. iOS开发零基础--Swift教程 可选类型
  4. yum服务器搭建(深入理解yum工作原理)
  5. 讲解JS的promise,这篇是专业认真的!
  6. linux命令之 top, free,ps
  7. Objective-C
  8. Controller简介
  9. WEBrick/Rack Puppet Master
  10. protobuf使用说明
  11. c++cin.ignore()
  12. docker私有仓库
  13. MySQL 5.6初始配置调整
  14. C#中泛型、程序集一些基本运用(Fifteenth Day)
  15. java基础知识汇总
  16. FW/IDS/IPS/WAF等安全设备部署方式及优缺点
  17. BZOJ4964 : 加长的咒语
  18. C++学习(二十三)(C语言部分)之 指针4
  19. Executor框架(一)
  20. Adapter中用不了getWindowManager()

热门文章

  1. VSCode常用插件之open in browser使用
  2. 【已解决】使用 yarn 安装时,报错node_modules\node sass:Command failed.
  3. [CF527D] Clique Problem - 贪心
  4. 巨杉Tech | SparkSQL+SequoiaDB 性能调优策略
  5. java内部类概念
  6. altair package and altair_viewer
  7. manifold learning
  8. ubuntu安装搜狗输入
  9. python中乱码怎么由来与解决方法
  10. JavaScript 数组,字符串,函数