output_description: If there exists an integer b (b \geq 2) such that f(b,n)=s, print the smallest
  such b. If such b does not exist, print `-1` instead.
  
  * * *
input_description: The input is given from Standard Input in the following format:
  
      
      
      n
      s
attempt: N, A = map(int, input().split())
  X = [int(e) for e in input().split()]
  # dp[i][k][s]: i番目まで見てk個選んで総和sとなる場合の数
  # 初期条件: dp[0][0][0] = 1
  # 遷移: dp[i][k][s] += dp[i-1][k-1][s-X[i]] + dp[i-1][k][s]
  # 答え: sum(dp[N][k][k*A] 1 <= k <= N)
  s_max = 2500
  dp = [[[0] * (s_max + 1) for k in range(N + 1)] for i in range(N + 1)]
  dp[0][0][0] = 1
  for i in range(1, N + 1):
      for k in range(N + 1):
          for s in range(s_max + 1):
              dp[i][k][s] += dp[i - 1][k][s]
              if k != 0 and 0 <= s - X[i - 1] <= s_max:
                  dp[i][k][s] += dp[i - 1][k - 1][s - X[i - 1]]
  ans = 0
  for k in range(1, N + 1):
      s = k * A
      ans += dp[N][k][s]
  print(ans)
  
problem_description: Statement
  
  For integers b (b \geq 2) and n (n \geq 1), let the function f(b,n) be defined
  as follows:
  
    * f(b,n) = n, when n < b
    * f(b,n) = f(b,\,{\rm floor}(n / b)) + (n \ {\rm mod} \ b), when n \geq b
  
  Here, {\rm floor}(n / b) denotes the largest integer not exceeding n / b, and
  n \ {\rm mod} \ b denotes the remainder of n divided by b.
  
  Less formally, f(b,n) is equal to the sum of the digits of n written in base
  b. For example, the following hold:
  
    * f(10,\,87654)=8+7+6+5+4=30
    * f(100,\,87654)=8+76+54=138
  
  You are given integers n and s. Determine if there exists an integer b (b \geq
  2) such that f(b,n)=s. If the answer is positive, also find the smallest such
  b.
samples: [{"input": "87654\n    30", "output": "10\n    \n\n* * *"}, {"input": "87654\n    138", "output": "100\n    \n\n* * *"}, {"input": "87654\n    45678", "output": "-1\n    \n\n* * *"}, {"input": "31415926535\n    1", "output": "31415926535\n    \n\n* * *"}, {"input": "1\n    31415926535", "output": "-1"}]