func_code_string: #include <bits/stdc++.h>   using namespace std;   template <typename S, typename T>   ostream& operator<<(ostream& out, pair<S, T> const& p) {     out <<  (  << p.first <<  ,   << p.second <<  ) ;     return out;   }   template <typename T>   ostream& operator<<(ostream& out, vector<T> const& v) {     long long l = v.size();     for (long long i = 0; i < l - 1; i++) out << v[i] <<    ;     if (l > 0) out << v[l - 1];     return out;   }   template <typename T>   void trace(const char* name, T&& arg1) {     cout << name <<   :   << arg1 <<   n ;   }   template <typename T, typename... Args>   void trace(const char* names, T&& arg1, Args&&... args) {     const char* comma = strchr(names + 1,  , );     cout.write(names, comma - names) <<   :   << arg1 <<   |  ;     trace(comma + 1, args...);   }   const int N = 202;   const int K = 1010;   const int MOD = 1e9 + 7;   int dp[N][N][K];   int n, kk, arr[N];   int pre[N];   int32_t main() {     ios_base::sync_with_stdio(false);     cin.tie(NULL);     cout.tie(NULL);     cin >> n >> kk;     for (int i = 1; i <= n; i++) {       cin >> arr[i];     }     sort(arr + 1, arr + 1 + n);     dp[0][0][0] = 1;     for (int i = 0; i < n; i++) {       for (int j = 0; j <= n; j++) {         for (int k = 0; k < K; k++) {           int nk = k + (j) * (arr[i + 1] - arr[i]);           if (nk <= kk) {             dp[i + 1][j][nk] =                 (0LL + (1LL * dp[i][j][k] * (j + 1)) % MOD + dp[i + 1][j][nk]) %                 MOD;             dp[i + 1][j + 1][nk] =                 (0LL + dp[i + 1][j + 1][nk] + dp[i][j][k]) % MOD;             if (j)               dp[i + 1][j - 1][nk] =                   (0LL + dp[i + 1][j - 1][nk] + 1LL * dp[i][j][k] * j) % MOD;           }         }       }     }     int ans = 0;     for (int i = 0; i <= kk; i++) {       ans = (ans + dp[n][0][i]) % MOD;     }     cout << ans <<   n ;   }   