#include <bits/stdc++.h>
#define int long long
#define fast ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
#define lg2(n) (63-__builtin_clzll(n))
#define mask(n) (1LL << (n))
#define TASK ""
#define openfile(); if( fopen(TASK".inp", "r")){freopen(TASK".inp", "r", stdin);freopen(TASK".out", "w", stdout);}
#define lc(n) (n << 1)
#define rc(n) ((n << 1) | 1)
#define fi first
#define se second
#define FOR(i, l, r, k) for( int i = l; i <= r; i += k)
#define FOD(i, r, l, k) for( int i = r; i >= l; i -= k)
#define mii map<int,int>
#define umi unordered_map<int, int>
#define pii pair<int,int>
#define vi vector<int>
using namespace std;
const int oo = 1e18;
const int mod = 998244353;
const int nmax = 2e5 + 8;
const int base = 311;
int n, k, a[nmax], x, st[19][nmax], f[nmax];
vi pos[nmax];
void pre(){
for(int i = 1; i <= n; ++i) st[0][i] = a[i];
for(int i = 1; i <= lg2(n); ++i){
for(int j = 1; j <= n - mask(i) + 1; ++j){
st[i][j] = min(st[i - 1][j], st[i - 1][j + mask(i - 1)]);
}
}
}
int get(int l, int r){
int k = lg2(r - l + 1);
return min(st[k][l], st[k][r - mask(k) + 1]);
}
void cmp(){
vector<int> v;
for(int i = 1; i <= n; ++i) v.push_back(a[i]);
sort(v.begin(), v.end());
v.erase(unique(v.begin(), v.end()), v.end());
for(int i = 1; i <= n; ++i){
a[i] = lower_bound(v.begin(), v.end(), a[i]) - v.begin() + 1;
}
}
int sol(int i, int val, const vi &v){
int l = 0, r = v.size() - 1, pos = -1;
while(l <= r){
int mid = l + r >> 1;
bool ok = 1;
ok = (v[mid] + 1 <= i - 1 && get(v[mid] + 1, i - 1) < a[i]);
if(v[mid] <= i - val && ok){
l = mid + 1;
pos = mid;
}
else r = mid - 1;
}
return pos;
}
int pf[nmax];
int calc(int val){
vector<vi> dp(k + 1, vi(n + 1, 0));
// vector<vi> pf(n + 1, 0);
for(int i = 1; i <= n; ++i){
f[i] = 0;
int j = sol(i, val, pos[a[i]]);
if(j != -1) f[i] = i - pos[a[i]][j] + 1;
if(f[i - 1]){
if(f[i]) f[i] = min(f[i], f[i - 1] + 1);
else f[i] = f[i - 1] + 1;
}
if(!val) f[i] = 1;
}
dp[0][0] = 1, pf[0] = 1;
for(int i = 1; i <= k; ++i){
pf[0] = dp[i - 1][0];
for(int j = 1; j <= n; ++j){
pf[j] = (pf[j - 1] + dp[i - 1][j]) % mod;
}
for(int j = 1; j <= n; ++j){
if(f[j]){
dp[i][j] = pf[j - f[j]];
}
// cout << i << ' ' << j << ' ' << dp[i][j] << endl;
}
}
return dp[k][n];
}
main(){
fast;
openfile();
cin >> n >> k >> x;
for(int i = 1; i <= n; ++i){
cin >> a[i];
}
cmp();
pre();
for(int i = 1; i <= n; ++i){
pos[a[i]].push_back(i);
}
cout << (calc(x) - calc(x + 1) + mod) % mod;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgaW50IGxvbmcgbG9uZwojZGVmaW5lIGZhc3QgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7IGNpbi50aWUobnVsbHB0cik7IGNvdXQudGllKG51bGxwdHIpOwojZGVmaW5lIGxnMihuKSAoNjMtX19idWlsdGluX2NsemxsKG4pKQojZGVmaW5lIG1hc2sobikgKDFMTCA8PCAobikpCiNkZWZpbmUgVEFTSyAiIgojZGVmaW5lIG9wZW5maWxlKCk7ICBpZiggZm9wZW4oVEFTSyIuaW5wIiwgInIiKSl7ZnJlb3BlbihUQVNLIi5pbnAiLCAiciIsIHN0ZGluKTtmcmVvcGVuKFRBU0siLm91dCIsICJ3Iiwgc3Rkb3V0KTt9CiNkZWZpbmUgbGMobikgKG4gPDwgMSkKI2RlZmluZSByYyhuKSAoKG4gPDwgMSkgfCAxKQoKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAojZGVmaW5lIEZPUihpLCBsLCByLCBrKSBmb3IoIGludCBpID0gbDsgaSA8PSByOyBpICs9IGspCiNkZWZpbmUgRk9EKGksIHIsIGwsIGspIGZvciggaW50IGkgPSByOyBpID49IGw7IGkgLT0gaykKCiNkZWZpbmUgbWlpIG1hcDxpbnQsaW50PgojZGVmaW5lIHVtaSB1bm9yZGVyZWRfbWFwPGludCwgaW50PgojZGVmaW5lIHBpaSBwYWlyPGludCxpbnQ+CiNkZWZpbmUgdmkgdmVjdG9yPGludD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgb28gPSAxZTE4Owpjb25zdCBpbnQgbW9kID0gOTk4MjQ0MzUzOwpjb25zdCBpbnQgbm1heCA9IDJlNSArIDg7CmNvbnN0IGludCBiYXNlID0gMzExOwoKaW50IG4sIGssIGFbbm1heF0sIHgsIHN0WzE5XVtubWF4XSwgZltubWF4XTsKCnZpIHBvc1tubWF4XTsKCnZvaWQgcHJlKCl7CiAgICBmb3IoaW50IGkgPSAxOyBpIDw9IG47ICsraSkgc3RbMF1baV0gPSBhW2ldOwogICAgZm9yKGludCBpID0gMTsgaSA8PSBsZzIobik7ICsraSl7CiAgICAgICAgZm9yKGludCBqID0gMTsgaiA8PSBuIC0gbWFzayhpKSArIDE7ICsrail7CiAgICAgICAgICAgIHN0W2ldW2pdID0gbWluKHN0W2kgLSAxXVtqXSwgc3RbaSAtIDFdW2ogKyBtYXNrKGkgLSAxKV0pOwogICAgICAgIH0KICAgIH0KfQoKaW50IGdldChpbnQgbCwgaW50IHIpewogICAgaW50IGsgPSBsZzIociAtIGwgKyAxKTsKICAgIHJldHVybiBtaW4oc3Rba11bbF0sIHN0W2tdW3IgLSBtYXNrKGspICsgMV0pOwp9Cgp2b2lkIGNtcCgpewogICAgdmVjdG9yPGludD4gdjsKICAgIGZvcihpbnQgaSA9IDE7IGkgPD0gbjsgKytpKSB2LnB1c2hfYmFjayhhW2ldKTsKICAgIHNvcnQodi5iZWdpbigpLCB2LmVuZCgpKTsKICAgIHYuZXJhc2UodW5pcXVlKHYuYmVnaW4oKSwgdi5lbmQoKSksIHYuZW5kKCkpOwogICAgZm9yKGludCBpID0gMTsgaSA8PSBuOyArK2kpewogICAgICAgIGFbaV0gPSBsb3dlcl9ib3VuZCh2LmJlZ2luKCksIHYuZW5kKCksIGFbaV0pIC0gdi5iZWdpbigpICsgMTsKICAgIH0KfQppbnQgc29sKGludCBpLCBpbnQgdmFsLCBjb25zdCB2aSAmdil7CiAgICBpbnQgbCA9IDAsIHIgPSB2LnNpemUoKSAtIDEsIHBvcyA9IC0xOwogICAgd2hpbGUobCA8PSByKXsKICAgICAgICBpbnQgbWlkID0gbCArIHIgPj4gMTsKICAgICAgICBib29sIG9rID0gMTsKICAgICAgICBvayA9ICh2W21pZF0gKyAxIDw9IGkgLSAxICYmIGdldCh2W21pZF0gKyAxLCBpIC0gMSkgPCBhW2ldKTsKICAgICAgICBpZih2W21pZF0gPD0gaSAtIHZhbCAmJiBvayl7CiAgICAgICAgICAgIGwgPSBtaWQgKyAxOwogICAgICAgICAgICBwb3MgPSBtaWQ7CiAgICAgICAgfQogICAgICAgIGVsc2UgciA9IG1pZCAtIDE7CiAgICB9CiAgICByZXR1cm4gcG9zOwp9CmludCBwZltubWF4XTsKaW50IGNhbGMoaW50IHZhbCl7CiAgICB2ZWN0b3I8dmk+IGRwKGsgKyAxLCB2aShuICsgMSwgMCkpOwovLyAgICB2ZWN0b3I8dmk+IHBmKG4gKyAxLCAwKTsKICAgIGZvcihpbnQgaSA9IDE7IGkgPD0gbjsgKytpKXsKICAgICAgICBmW2ldID0gMDsKICAgICAgICBpbnQgaiA9IHNvbChpLCB2YWwsIHBvc1thW2ldXSk7CiAgICAgICAgaWYoaiAhPSAtMSkgZltpXSA9IGkgLSBwb3NbYVtpXV1bal0gKyAxOwogICAgICAgIGlmKGZbaSAtIDFdKXsKICAgICAgICAgICAgaWYoZltpXSkgZltpXSA9IG1pbihmW2ldLCBmW2kgLSAxXSArIDEpOwogICAgICAgICAgICBlbHNlIGZbaV0gPSBmW2kgLSAxXSArIDE7CiAgICAgICAgfQogICAgICAgIGlmKCF2YWwpIGZbaV0gPSAxOwogICAgfQogICAgZHBbMF1bMF0gPSAxLCBwZlswXSA9IDE7CiAgICBmb3IoaW50IGkgPSAxOyBpIDw9IGs7ICsraSl7CiAgICAgICAgcGZbMF0gPSBkcFtpIC0gMV1bMF07CiAgICAgICAgZm9yKGludCBqID0gMTsgaiA8PSBuOyArK2opewogICAgICAgICAgICBwZltqXSA9IChwZltqIC0gMV0gKyBkcFtpIC0gMV1bal0pICUgbW9kOwogICAgICAgIH0KICAgICAgICBmb3IoaW50IGogPSAxOyBqIDw9IG47ICsrail7CiAgICAgICAgICAgIGlmKGZbal0pewogICAgICAgICAgICAgICAgZHBbaV1bal0gPSBwZltqIC0gZltqXV07CiAgICAgICAgICAgIH0KLy8gICAgICAgICAgICBjb3V0IDw8IGkgPDwgJyAnIDw8IGogPDwgJyAnIDw8IGRwW2ldW2pdIDw8IGVuZGw7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIGRwW2tdW25dOwp9CgptYWluKCl7CiAgICBmYXN0OwogICAgb3BlbmZpbGUoKTsKICAgIGNpbiA+PiBuID4+IGsgPj4geDsKICAgIGZvcihpbnQgaSA9IDE7IGkgPD0gbjsgKytpKXsKICAgICAgICBjaW4gPj4gYVtpXTsKICAgIH0KICAgIGNtcCgpOwogICAgcHJlKCk7CiAgICBmb3IoaW50IGkgPSAxOyBpIDw9IG47ICsraSl7CiAgICAgICAgcG9zW2FbaV1dLnB1c2hfYmFjayhpKTsKICAgIH0KICAgIGNvdXQgPDwgKGNhbGMoeCkgLSBjYWxjKHggKyAxKSArIG1vZCkgJSBtb2Q7Cn0K