using System; using static System.Console; using System.Linq; using System.Collections.Generic; using System.Runtime.Intrinsics.Arm; class Program { static int NN => int.Parse(ReadLine()); static int[] NList => ReadLine().Split().Select(int.Parse).ToArray(); static int[][] NArr(long n) => Enumerable.Repeat(0, (int)n).Select(_ => NList).ToArray(); public static void Main() { Solve(); } static void Solve() { var c = NList; var (n, k) = (c[0], c[1]); var a = NList; var mod = 1_000_000_007; var over = new List(); var below = new List(); foreach (var ai in a) { if (ai > k / 2) over.Add(ai); else below.Add(ai); } over.Sort((l, r) => r.CompareTo(l)); below.Sort(); var ans = 1L; var pos = 0; var use = 0; foreach (var ai in over) { while (pos < below.Count && below[pos] + ai <= k) ++pos; ans = ans * (pos - use) % mod; ++use; } for (var i = below.Count - over.Count - 1; i >= 0; i -= 2) ans = ans * i % mod; WriteLine(ans); } }