Control Block
The company Macrohard has developed a new protocol for data exchange over the network. Each data block in this protocol consists of N numbers, each ranging from 0 to M-1, inclusive. To ensure reliable transmission, a control block of the same length is sent alongside the data block.
Consider a data block composed of numbers a_1, a_2, ..., a_N. The corresponding control block is made up of numbers b_1, b_2, ..., b_N, also ranging from 0 to M-1, inclusive. These numbers must satisfy the following conditions: b_1=(a_N+b_N) mod M, b_2=(a_1+b_1) mod M, b_3=(a_2+b_2) mod M, ..., b_N=(a_{N-1}+b_{N-1}) mod M. Here, X mod M represents the remainder when X is divided by M, for example, 7 mod 4 = 3 and 6 mod 2 = 0.
Data blocks for which a control block cannot be constructed according to these rules are deemed suspicious and are not permitted for network transmission.
Vanya aspires to join Macrohard as a programmer, and his entry task is to write a procedure that constructs a control block for a given data block. Can you assist him?
Input
The first line of the input contains the numbers N and M (1 ≤ N ≤ 1000, 2 ≤ M ≤ 10^9). The second line contains the data block, with numbers separated by spaces, for which the control block needs to be constructed.
Output
On the first line of the output, print YES if a control block can be constructed for the given data block, and NO if it cannot. If a control block can be constructed, print it on the second line, with numbers separated by spaces. If there are multiple valid solutions, any of them may be printed.