#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
long long pow_mod(long long x, long long k) {
  long long res = 1;
  x %= mod;
  for (; k; k >>= 1, x = x * x % mod) {
    if (k & 1) res = res * x % mod;
  }
  return res;
}
long long gcd(long long a, long long b) { return !b ? a : gcd(a, a % b); }
void add(long long &a, long long b) { (a += b) %= mod; }
const int maxn = 55;
int n, K, cnt0, cnt1;
int A[maxn];
long long dp[2][2][maxn][maxn];
long long comb[maxn][maxn];
void pre() {
  comb[0][0] = 1;
  for (int i = (1); i < (maxn); i++) {
    comb[i][0] = comb[i][i] = 1;
    for (int j = (1); j < (i); j++)
      comb[i][j] = (comb[i - 1][j - 1] + comb[i - 1][j]) % mod;
  }
}
int main() {
  pre();
  scanf("%d%d", &n, &K);
  for (int i = (1); i < (n + 1); i++) scanf("%d", &A[i]), cnt0 += A[i] == 50;
  cnt1 = n - cnt0;
  dp[0][0][cnt0][cnt1] = 1;
  int cur = 0;
  for (int i = (0); i < (4 * n + 1); i++) {
    memset(dp[1 - cur], 0, sizeof(dp[1 - cur]));
    for (int d = (0); d < (2); d++)
      for (int j = (0); j < (cnt0 + 1); j++)
        for (int k = (0); k < (cnt1 + 1); k++)
          if (dp[cur][d][j][k]) {
            if (j == 0 && k == 0 && d == 1) {
              printf("%d\n%I64d", i, dp[cur][d][j][k]);
              return 0;
            }
            if (d == 0) {
              for (int a = (0); a < (j + 1); a++)
                if (a * 50 <= K) {
                  for (int b = (0); b < (k + 1); b++)
                    if (a * 50 + b * 100 <= K) {
                      if (!a && !b) continue;
                      add(dp[1 ^ cur][1 ^ d][j - a][k - b],
                          comb[j][a] * comb[k][b] % mod * dp[cur][d][j][k] %
                              mod);
                    } else
                      break;
                } else
                  break;
            } else {
              int c0 = cnt0 - j, c1 = cnt1 - k;
              for (int a = (0); a < (c0 + 1); a++)
                if (a * 50 <= K) {
                  for (int b = (0); b < (c1 + 1); b++)
                    if (a * 50 + b * 100 <= K) {
                      if (!a && !b) continue;
                      add(dp[1 ^ cur][1 ^ d][j + a][k + b],
                          comb[c0][a] * comb[c1][b] % mod * dp[cur][d][j][k] %
                              mod);
                    } else
                      break;
                } else
                  break;
            }
          }
    cur = 1 - cur;
  }
  puts("-1\n0");
  return 0;
}
