AT_agc075_e [AGC075E] Many Optimization Problems

Description

> **Optimization Problem**長さ $ N $ の非負整数列 $ A=(A_1,A_2,\dots,A_N) $ が与えられます。また、長さ $ N+1 $ の非負整数列 $ X=(0,0,\dots,0) $ があります。 > > あなたは今から $ i=1,2,\dots,N $ について以下の操作を行います。 > > - $ 0 \le v \le A_i $ を満たす整数 $ v $ を選び、 $ X_i,X_{i+1} $ にそれぞれ $ v,A_i-v $ を加算する。 > > 操作終了時の $ X $ の最大値としてあり得る値の最小値を求めてください。 正整数 $ N,M $ と素数 $ P $ が与えられます。長さ $ N $ かつ総和が $ M $ であるような非負整数列 $ A=(A_1,A_2,\dots,A_N) $ 全てに対する **Optimization Problem** の答えの総和を $ P $ で割った余りを求めてください。

Input Format

入力は以下の形式で標準入力から与えられる。 > $ N $ $ M $ $ P $

Output Format

**Optimization Problem** の答えの総和を $ P $ で割った余りを出力せよ。

Explanation/Hint

### Sample Explanation 1 例えば、 $ A=(1,0,2) $ について **Optimization Problem** を解きます。例えば、操作列の一例として以下のようなものがあります。 - $ i = 1 $ では $ v = 1 $ とする。 $ X=(1,0,0,0) $ となる。 - $ i = 2 $ では $ v = 0 $ とする。 $ X=(1,0,0,0) $ となる。 - $ i = 3 $ では $ v = 1 $ とする。 $ X=(1,0,1,1) $ となる。 $ X $ の最大値を $ 0 $ 以下にすることは出来ないため、答えは $ 1 $ です。 これ以外に答えが $ 1 $ となる数列が $ 6 $ 個、答えが $ 2 $ となる数列が $ 3 $ 個あるためその総和は $ 13 $ です。 ### Constraints - $ 1 \le N \le 100 $ - $ 1 \le M \le 10^{18} $ - $ 9 \times 10^8 \le P \le 10^9 $ - $ P $ は素数