#include using namespace std; const int MAXN = 5010, MOD = 1E9 + 9, MAXK = 202; void mod(int &x) { while (x < 0) { x += MOD; } while (x >= MOD) { x -= MOD; } } int r[MAXK][3][2][MAXN]; int dp[MAXK][3][2], A, B; void modify(const int mint, const int dl, const int go, int x, const int y) { for (; x < MAXN; x = (x|(x+1))) { r[mint][dl][go][x] += y; mod(r[mint][dl][go][x]); } } int sumPref(const int mint, const int dl, const int go, int x) { int res = 0; for (; x >= 0; x = ((x&(x+1) ) - 1)) { res += r[mint][dl][go][x]; mod(res); } return res; } int sumSuf(const int mint, const int dl, const int go, int x) { int res = sumPref(mint, dl, go, MAXN - 1) - sumPref(mint, dl, go, x - 1); mod(res); return res; } int a[MAXN], n; map trans; setwas; void solve() { was.clear(); trans.clear(); memset(r, 0, sizeof(r) ); memset(dp, 0, sizeof(dp) ); cin>>n>>A>>B; assert(1 <= n && n <= 5000); assert(0 <= A && A <= 200); assert(0 <= B && B <= 200); for (int i = 1; i <= n; i++) { cin>>a[i]; if ( was.find(a[i]) != was.end() ) { assert(false); } was.insert(a[i]); } if ( abs(A - B) > 1 ) { cout<<0<<"\n"; return ; } int lst = 1; for (auto it = was.begin(); it != was.end(); ++it) { trans[*it] = lst; lst++; } for (int i = 1; i <= n; i++) { a[i] = trans[ a[i] ]; } int ans = 0; for (int i = 1; i <= n; i++) { for (int j = 0; j <= A; j++) { for (int k = max(0, j - 1); k <= min(j + 1, B); k++) { dp[j][k - j + 1][0] = sumPref(j, k - j + 1, 0, a[i]); dp[j][k - j + 1][1] = sumSuf(j, k - j + 1, 1, a[i]); } } ans += dp[A][B - A + 1][0]; mod(ans); ans += dp[A][B - A + 1][1]; mod(ans); modify(0, 1, 0, a[i], 1); modify(0, 1, 1, a[i], 1); for (int j = 0; j <= A; j++) { for (int k = max(0, j - 1); k <= min(j + 1, B); k++) { modify(j, k - j + 1, 0, a[i], dp[j][k - j + 1][0]); modify(j, k - j + 1, 1, a[i], dp[j][k - j + 1][1]); if ( abs(j - k + 1) <= 1) { modify(j + 1, k - j, 0, a[i], dp[j][k - j + 1][1]); } if ( abs(j - k - 1) <= 1) { modify(j, k - j + 2, 1, a[i], dp[j][k - j + 1][0]); } } } } if (A == 0 && B == 0) { ans += n; mod(ans); } cout<>test; assert(test <= 10); while (test--) { solve(); } return 0; }