Let's call beauty of an array b_1, b_2, …, b_n (n > 1) — min_{1 ≤ i < j ≤ n} |b_i - b_j|.

You're given an array a_1, a_2, … a_n and a number k. Calculate the sum of beauty over all subsequences of the array of length exactly k. As this number can be very large, output it modulo 998244353.

A sequence a is a subsequence of an array b if a can be obtained from b by deletion of several (possibly, zero or all) elements.

Input

The first line contains integers n, k (2 ≤ k ≤ n ≤ 1000).

The second line contains n integers a_1, a_2, …, a_n (0 ≤ a_i ≤ 10^5).

Output

Output one integer — the sum of beauty over all subsequences of the array of length exactly k. As this number can be very large, output it modulo 998244353.

Examples

Input


4 3
1 7 3 5


Output


8

Input


5 5
1 10 100 1000 10000


Output


9

Note

In the first example, there are 4 subsequences of length 3 — [1, 7, 3], [1, 3, 5], [7, 3, 5], [1, 7, 5], each of which has beauty 2, so answer is 8.

In the second example, there is only one subsequence of length 5 — the whole array, which has the beauty equal to |10-1| = 9.
#include <bits/stdc++.h>
using namespace std;
const double PI = acos(-1);
const double eps = 1e-9;
const int inf = 2000000000;
const long long infLL = 9000000000000000000;
inline bool EQ(double a, double b) { return fabs(a - b) < 1e-9; }
inline long long gcd(long long a, long long b) {
  return b == 0 ? a : gcd(b, a % b);
}
inline long long lcm(long long a, long long b) { return a * b / gcd(a, b); }
int dx[] = {0, 0, +1, -1, +1, +1, -1, -1};
int dy[] = {+1, -1, 0, 0, +1, -1, +1, -1};
template <typename first, typename second>
ostream &operator<<(ostream &os, const pair<first, second> &p) {
  return os << "(" << p.first << ", " << p.second << ")";
}
template <typename T>
ostream &operator<<(ostream &os, const vector<T> &v) {
  os << "{";
  for (auto it = v.begin(); it != v.end(); ++it) {
    if (it != v.begin()) os << ", ";
    os << *it;
  }
  return os << "}";
}
template <typename T>
ostream &operator<<(ostream &os, const set<T> &v) {
  os << "[";
  for (auto it = v.begin(); it != v.end(); ++it) {
    if (it != v.begin()) os << ", ";
    os << *it;
  }
  return os << "]";
}
template <typename T>
ostream &operator<<(ostream &os, const multiset<T> &v) {
  os << "[";
  for (auto it = v.begin(); it != v.end(); ++it) {
    if (it != v.begin()) os << ", ";
    os << *it;
  }
  return os << "]";
}
template <typename first, typename second>
ostream &operator<<(ostream &os, const map<first, second> &v) {
  os << "[";
  for (auto it = v.begin(); it != v.end(); ++it) {
    if (it != v.begin()) os << ", ";
    os << it->first << " = " << it->second;
  }
  return os << "]";
}
void faltu() { cerr << '\n'; }
template <typename T>
void faltu(T a[], int n) {
  for (int i = 0; i < n; ++i) cerr << a[i] << ' ';
  cerr << '\n';
}
template <typename T, typename... hello>
void faltu(T arg, const hello &...rest) {
  cerr << arg << ' ';
  faltu(rest...);
}
int modAdd(int a, int b) {
  int s = (a + b);
  if (s >= 998244353) s -= 998244353;
  return s;
}
int modSub(int a, int b) {
  int s = a - b;
  if (s < 0) s += 998244353;
  return s;
}
int modMul(int a, int b) { return (1LL * a * b) % 998244353; }
const int mx = 1e5 + 123;
int val[mx][3], a[1123], dp[mx][3], cnt1[mx], b[1123];
vector<int> s;
bool vis[mx];
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  ;
  int n, k, mx_a = -1;
  cin >> n >> k;
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
    cnt1[a[i]]++;
    mx_a = max(a[i], mx_a);
    s.push_back(a[i]);
  }
  int f = 0;
  sort((s).begin(), (s).end());
  for (auto u : s) {
    if (!vis[u]) b[++f] = u;
    vis[u] = 1;
  }
  int mx_x = ((mx_a) / (k - 1)) + 1;
  int ans = 0;
  for (int i = 1; i <= f; i++) {
    dp[b[i]][0] = dp[b[i]][1] = 0;
    val[b[i]][1] = 0;
    val[b[i]][0] = cnt1[b[i]];
  }
  for (int x = 1; x <= mx_x; x++) {
    for (int cnt = 2; cnt <= k; cnt++) {
      long long sum1 = 0, sum0 = 0, d = 1;
      for (int i = 1; i <= f; i++) {
        bool yes = 0;
        while (d <= i - 1 && b[d] <= b[i] - x && b[i] >= x) {
          sum1 = modAdd(sum1, val[b[d]][1]);
          sum0 = modAdd(sum0, val[b[d]][0]);
          if (b[d] + x == b[i]) {
            yes = 1;
          }
          d++;
        }
        dp[b[i]][0] = sum0;
        dp[b[i]][1] = sum1;
        if (yes) {
          dp[b[i]][0] = modSub(dp[b[i]][0], val[b[i] - x][0]);
          dp[b[i]][1] = modAdd(dp[b[i]][1], val[b[i] - x][0]);
        }
        dp[b[i]][0] = modMul(dp[b[i]][0], cnt1[b[i]]);
        dp[b[i]][1] = modMul(dp[b[i]][1], cnt1[b[i]]);
      }
      for (int i = 1; i <= f; i++) {
        val[b[i]][0] = dp[b[i]][0];
        val[b[i]][1] = dp[b[i]][1];
        if (cnt == k) {
          ans = modAdd(ans, modMul(x, val[b[i]][1]));
          dp[b[i]][0] = dp[b[i]][1] = 0;
          val[b[i]][1] = 0;
          val[b[i]][0] = cnt1[b[i]];
        }
      }
    }
  }
  cout << ans << '\n';
  return 0;
}
