func_code_string: #include <bits/stdc++.h>   using namespace std;   template <typename T, typename F>   class SegTree {     int n;     T uni;     F f;     vector<T> dat;       public:     SegTree(int _n, F f, T uni) : f(f), uni(uni) {       n = 1;       while (n < _n) n *= 2;       dat = vector<T>(2 * n, uni);     }     void set(int k, const T x) { dat[k + n] = x; }     void build() {       for (int i = n - 1; i >= 0; i--) {         dat[i] = f(dat[2 * i], dat[2 * i + 1]);       }     }     void update(int k, T x) {       k += n;       dat[k] = x;       while (k >>= 1) {         dat[k] = f(dat[2 * k], dat[2 * k + 1]);       }     }     T query(int a, int b) {       T l = uni, r = uni;       for (a += n, b += n; a < b; a >>= 1, b >>= 1) {         if (a & 1) l = f(l, dat[a++]);         if (b & 1) r = f(dat[--b], r);       }       return f(l, r);     }   };   int main() {     int n, k, d;     scanf( %d %d %d , &n, &k, &d);     int a[n];     for (int i = 0; i < (int)n; i++) scanf( %d , &a[i]);     sort(a, a + n);     auto f = [](int a, int b) { return a + b; };     SegTree<int, decltype(f)> st(n + 1, f, 0);     st.update(0, 1);     for (int i = 0; i < (int)n; i++) {       int l = lower_bound(a, a + n, a[i] - d) - a;       int r = max(0, i - k + 2);       if (st.query(l, r) > 0) st.update(i + 1, 1);     }     cout << (st.query(n, n + 1) ?  YES  :  NO ) << endl;     return 0;   }   