Problem:
Score : 300 points

Problem Statement

Tak has N cards. On the i-th (1 \leq i \leq N) card is written an integer x_i.
He is selecting one or more cards from these N cards, so that the average of the integers written on the selected cards is exactly A.
In how many ways can he make his selection?

Constraints

1 \leq N \leq 50

1 \leq A \leq 50

1 \leq x_i \leq 50

N,\,A,\,x_i are integers.

Partial Score

200 points will be awarded for passing the test set satisfying 1 \leq N \leq 16.

Input

The input is given from Standard Input in the following format:

N A
x_1 x_2 ... x_N

Output

Print the number of ways to select cards such that the average of the written integers is exactly A.

Sample Input 1

4 8
7 9 8 9

Sample Output 1

5

The following are the 5 ways to select cards such that the average is 8:

Select the 3-rd card.

Select the 1-st and 2-nd cards.

Select the 1-st and 4-th cards.

Select the 1-st, 2-nd and 3-rd cards.

Select the 1-st, 3-rd and 4-th cards.

Sample Input 2

3 8
6 6 9

Sample Output 2

0

Sample Input 3

8 5
3 6 2 8 7 6 5 9

Sample Output 3

19

Sample Input 4

33 3
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3

Sample Output 4

8589934591

The answer may not fit into a 32-bit integer.

Solution in Common Lisp (SBCL 1.1.14) (judge verdict: Accepted)

(defvar *b*)
(defvar *cache*)
(defvar *x*)

(defun binomial (n)
	(setf *b* (make-array (list n n)))
	(dotimes (i n)
		(setf (aref *b* 0 i) 0)
		(setf (aref *b* i i) 1))
	(loop :for i :from 1 :below n :do
		 (loop :for j :from 1 :below i :do
				(setf (aref *b* i j) (+ (aref *b* (1- i) (1- j)) (aref *b* (1- i) j))))))

(defun s (a k i)
	(cond ((< a 0) 0)
				((< k 0) 0)
				((zerop k) (if (zerop a) 1 0))
				((> i a) 0)
				((= i 51) 0)
				(t (let ((key (+ (* a 51 51) (* k 51) i)))
						 (if (aref *cache* key)
								 (aref *cache* key)
								 (let ((c (s a k (1+ i))))
									 (loop :for j :from 1 :to (aref *x* i) :do
											(incf c (* (aref *b* (1+ (aref *x* i)) (1+ j))
																 (s (- a (* i j)) (- k j) (1+ i)))))
									 (setf (aref *cache* key) c)
									 c))))))

(let ((n (read))
			(a (read)))
	(binomial (+ n 2))
	(setf *cache* (make-array (expt 51 4) :initial-element nil))
	(setf *x* (make-array 51 :initial-element 0))
	(loop :repeat n :do (incf (aref *x* (read))))
	(format t "~a~%" (loop :for i :from 1 :to n :sum (s (* a i) i 0))))