#include <bits/stdc++.h>
using namespace std;
long long n, k;
long long num[2];
long long C[110][110];
long long dp[240][60][60];
int main() {
  scanf("%lld %lld", &n, &k);
  for (int i = 0; i < 60; i++) {
    C[i][0] = 1;
    for (int j = 1; j <= i; j++)
      C[i][j] = (C[i - 1][j] + C[i - 1][j - 1]) % 1000000007;
  }
  k /= 50;
  for (int i = 1, tmp; i <= n; i++) {
    scanf("%d", &tmp);
    if (tmp == 50)
      num[0]++;
    else if (tmp == 100)
      num[1]++;
  }
  dp[0][num[0]][num[1]] = 1;
  int flag = 0;
  for (int i = 1; i <= 5 * n; i++) {
    for (int j = 0; j <= num[0]; j++) {
      for (int l = 0; l <= num[1]; l++) {
        if ((j + 2 * l) && (j + 2 * l) <= k) {
          for (int x = j; x <= num[0]; x++) {
            for (int y = l; y <= num[1]; y++) {
              dp[i][x - j][y - l] =
                  (dp[i][x - j][y - l] + C[x][j] * C[y][l] % 1000000007 *
                                             dp[i - 1][x][y] % 1000000007) %
                  1000000007;
            }
          }
        }
      }
    }
    if (dp[i][0][0]) {
      printf("%d\n", i);
      printf("%lld", (dp[i][0][0] + 1000000007) % 1000000007);
      flag = 1;
      break;
    }
    i++;
    for (int j = 0; j <= num[0]; j++) {
      for (int l = 0; l <= num[1]; l++) {
        if ((j + 2 * l) && (j + 2 * l) <= k) {
          for (int x = j; x <= num[0]; x++) {
            for (int y = l; y <= num[1]; y++) {
              dp[i][num[0] - x + j][num[1] - y + l] =
                  (dp[i][num[0] - x + j][num[1] - y + l] +
                   C[x][j] * C[y][l] % 1000000007 *
                       dp[i - 1][num[0] - x][num[1] - y] % 1000000007) %
                  1000000007;
            }
          }
        }
      }
    }
  }
  if (!flag) {
    printf("-1\n0");
  }
  return 0;
}
