#include <bits/stdc++.h>
using namespace std;
template <typename A, typename B>
string to_string(pair<A, B> p);
template <typename A, typename B, typename C>
string to_string(tuple<A, B, C> p);
template <typename A, typename B, typename C, typename D>
string to_string(tuple<A, B, C, D> p);
string to_string(const string &s) { return '"' + s + '"'; }
string to_string(const char *s) { return to_string((string)s); }
string to_string(bool b) { return (b ? "true" : "false"); }
string to_string(vector<bool> v) {
  bool first = true;
  string res = "{";
  for (int i = 0; i < static_cast<int>(v.size()); i++) {
    if (!first) {
      res += ", ";
    }
    first = false;
    res += to_string(v[i]);
  }
  res += "}";
  return res;
}
template <size_t N>
string to_string(bitset<N> v) {
  string res = "";
  for (size_t i = 0; i < N; i++) {
    res += static_cast<char>('0' + v[i]);
  }
  return res;
}
template <typename A>
string to_string(A v) {
  bool first = true;
  string res = "{";
  for (const auto &x : v) {
    if (!first) {
      res += ", ";
    }
    first = false;
    res += to_string(x);
  }
  res += "}";
  return res;
}
template <typename A, typename B>
string to_string(pair<A, B> p) {
  return "(" + to_string(p.first) + ", " + to_string(p.second) + ")";
}
template <typename A, typename B, typename C>
string to_string(tuple<A, B, C> p) {
  return "(" + to_string(get<0>(p)) + ", " + to_string(get<1>(p)) + ", " +
         to_string(get<2>(p)) + ")";
}
template <typename A, typename B, typename C, typename D>
string to_string(tuple<A, B, C, D> p) {
  return "(" + to_string(get<0>(p)) + ", " + to_string(get<1>(p)) + ", " +
         to_string(get<2>(p)) + ", " + to_string(get<3>(p)) + ")";
}
void debug_out() { cerr << endl; }
template <typename Head, typename... Tail>
void debug_out(Head H, Tail... T) {
  cerr << " " << to_string(H);
  debug_out(T...);
}
__attribute__((unused)) const int MOD = 1e9 + 7;
__attribute__((unused)) const int DOM = 998244353;
long long a[(int)1e5 + 1], b[(int)1e5 + 1];
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL), cout.tie(NULL);
  int n, d, m;
  cin >> n >> d >> m;
  int X = 0, Y = 0;
  for (int i = 0, temp; i < n; i++) {
    cin >> temp;
    if (temp > m)
      a[X++] = temp;
    else
      b[Y++] = temp;
  }
  sort(a, a + X), sort(b, b + Y);
  reverse(a, a + X), reverse(b, b + Y);
  for (int i = 1; i < X; i++) a[i] += a[i - 1];
  for (int i = 1; i < Y; i++) b[i] += b[i - 1];
  if (X == 0) return cout << b[Y - 1] << '\n', 0;
  long long ans = 0;
  for (int x = 1; x <= X; x++) {
    long long ss = n - 1ll * (x - 1) * (d + 1) - 2;
    if (ss < -1) continue;
    if (ss >= Y) ss = Y - 1;
    ans = max(ans, a[x - 1] + (ss >= 0 ? b[ss] : 0));
  }
  cout << ans << '\n';
  return 0;
}
