#include using namespace std; #define INF_LL (int64)1e18 #define INF (int32)1e9 #define REP(i, n) for(int64 i = 0;i < (n);i++) #define FOR(i, a, b) for(int64 i = (a);i < (b);i++) #define all(x) x.begin(),x.end() #define fs first #define sc second using int32 = int_fast32_t; using uint32 = uint_fast32_t; using int64 = int_fast64_t; using uint64 = uint_fast64_t; using PII = pair; using PLL = pair; const double eps = 1e-10; templateinline void chmin(A &a, B b){if(a > b) a = b;} templateinline void chmax(A &a, B b){if(a < b) a = b;} const int64 mod = 1e9+7; int64 N, L; vector S; vector fact; int64 get(const vector> &v, int64 i, int64 j){ if (i < 0 || j < 0) return 0; return v[i][j]; } void init(){ fact.resize(100, 1); FOR(i, 1, 100){ fact[i] = fact[i-1] * i; } } int main(void){ init(); cin >> N >> L; L *= 60; S.resize(N); REP(i, N){ int64 m, s; scanf("%d:%d", &m, &s); S[i] = m*60+s; } vector> dp(N+1, vector(L+60*60+1, 0)); dp[0][0] = 1; REP(i, N){ vector> dp2(N+1, vector(L+60*60+1, 0)); REP(j, N+1){ REP(k, L+60*60+1){ dp2[j][k] = get(dp, j-1, k-S[i]) + get(dp, j, k); } } swap(dp, dp2); } double res = 0; REP(i, N){ vector> dp2(N+1, vector(L+60*60+1, 0)); REP(j, N+1){ REP(k, L+60*60+1){ dp2[j][k] = dp[j][k] - get(dp2, j-1, k-S[i]); if (k < L && N-j-1 >= 0) res += dp2[j][k] * fact[j] * fact[N-j-1] / fact[N]; } } } cout << fixed << setprecision(10) << res << endl; }