The company Macrohard has developed a new protocol for data exchange over the network. Each data block in this protocol consists of numbers, each ranging from 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, \ldots, a_N. The corresponding control block is made up of numbers b_1, b_2, \ldots, b_N, also ranging from 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 is divided by , 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?
The first line of the input contains the numbers and (1 \le N \le 1000, 2 \le M \le 10^9). The second line contains the data block, with numbers separated by spaces, for which the control block needs to be constructed.
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.
Example 1