블록 쌓기

아직 제출이 없습니다시간 제한1초메모리 제한32 MB

문제

영글이는 블록놀이를 한다. 영글이가 가진 블록은 KK 종류이고, 모두 높이가 1이며 너비는 1부터 KK까지이다. 너비가 같은 블록은 색이 모두 같다. 너비가 다르다고 해서 색까지 다르지는 않다. 각 종류의 블록은 무한히 많다. 예를 들어 K=3K=3이고 세 블록의 색이 모두 다르면, 아래 세 가지 블록을 얼마든지 쓸 수 있다.

영글이는 이 블록을 너비가 WW인 바닥 블록 위에 쌓는다. 너무 높으면 가지고 놀기 불편하므로 높이가 HH 이하가 되게 쌓는다. 아래 그림은 W=6W=6인 예이다.

블록은 칸에 정확히 맞춰 놓아야 하고, 놓인 블록 밑에는 빈 공간이 없어야 한다. 왼쪽 그림은 규칙을 지킨 예이고, 오른쪽 그림은 지키지 못한 예이다.

왼쪽 그림에서는 모든 블록이 규칙을 지켜 쌓여 있고 높이는 4이다. 오른쪽 그림에서는 맨 왼쪽 빨간 블록이 칸에 맞지 않는다. 파란 블록의 가운데 아래가 비어 있고, 맨 오른쪽 빨간 블록의 아래도 비어 있다. 그래서 오른쪽은 제대로 쌓은 경우가 아니다.

규칙을 지켜 블록을 쌓는 경우의 수를 구하라. 정면에서 보았을 때 모든 칸의 색이 같은 두 쌓기는 한 가지로 센다. 아무것도 쌓지 않은 경우도 한 가지로 센다.

입력

첫째 줄에 블록 종류의 수 KK (1K3001 \le K \le 300), 바닥 블록의 너비 WW, 쌓을 수 있는 최대 높이 HH (1W,H3001 \le W, H \le 300)가 공백으로 구분되어 주어진다.

둘째 줄에 정수 KK개가 주어진다. ii번째 수 CiC_i (1CiK1 \le C_i \le K)는 너비가 ii인 블록의 색이다.

출력

규칙을 지켜 블록을 쌓는 경우의 수를 1,000,000,007로 나눈 나머지를 출력한다.