#include <bits/stdc++.h>
using namespace std;
template <class T>
void _R(T &x) {
  cin >> x;
}
void _R(int &x) { scanf("%d", &x); }
void _R(long long &x) { scanf("%lld", &x); }
void _R(double &x) { scanf("%lf", &x); }
void _R(char &x) { scanf(" %c", &x); }
void _R(char *x) { scanf("%s", x); }
template <class T>
void _W(const T &x) {
  cout << x;
}
void _W(const int &x) { printf("%d", x); }
void _W(const long long &x) { printf("%lld", x); }
void _W(const double &x) { printf("%.16f", x); }
void _W(const char &x) { putchar(x); }
void _W(const char *x) { printf("%s", x); }
long long a[100005];
long long pre[100005];
int main() {
  int n, d, m;
  _R(n);
  _R(d);
  _R(m);
  int pos = 0;
  for (int i = 0; i < n; i++) {
    _R(a[i]);
    if (a[i] > m) {
      pos++;
    }
  }
  sort(a, a + n, greater<long long>());
  long long res = 0;
  pre[0] = a[0];
  for (int i = 1; i < n; i++) {
    pre[i] = pre[i - 1] + a[i];
  }
  for (int i = pos; i < n; i++) {
    res += a[i];
  }
  for (int k = 1; k <= pos; k++) {
    if ((k - 1) * (1 + d) + 1 > n) break;
    long long ans = 0;
    ans += pre[k - 1];
    ans += pre[min(pos + n - (k - 1) * (1 + d) - 1, n) - 1] - pre[pos - 1];
    res = max(res, ans);
  }
  _W(res);
  return 0;
}
