#include<bits/stdc++.h> #define N 10005 #define lowbit(x) x&(-x) usingnamespacestd;
template <typename T> inlinevoidread(T &num){ T x = 0, f = 1; char ch = getchar(); for (; ch > '9' || ch < '0'; ch = getchar()) if (ch == '-') f = -1; for (; ch <= '9' && ch >= '0'; ch = getchar()) x = (x << 3) + (x << 1) + (ch ^ '0'); num = x * f; }
int n, k, a[N], dp[N][505]; int tr[N][505], ans;
voidUpdate(int x, int y, int v){ y++; for (int i = x; i <= 10000; i += lowbit(i)) { for (int j = y; j <= 501; j += lowbit(j)) { tr[i][j] = max(tr[i][j], v); } } }
intQuery(int x, int y){ y++; int ret = 0; for (int i = x; i; i -= lowbit(i)) { for (int j = y; j; j -= lowbit(j)) { ret = max(ret, tr[i][j]); } } return ret; }
intmain(){ read(n); read(k); for (int i = 1; i <= n; i++) { read(a[i]); } for (int i = 1; i <= n; i++) { for (int j = k; j >= 0; j--) { dp[i][j] = Query(a[i] + j, j) + 1; Update(a[i] + j, j, dp[i][j]); ans = max(ans, dp[i][j]); } } printf("%d\n", ans); return0; }