#include #include #include #include #include #include #include #include #include #include #include #include #include #define repd(i,a,b) for (int i=(int)(a);i<(int)(b);i++) #define rep(i,n) repd(i,0,n) #define all(x) (x).begin(),(x).end() #define mod 1000000007 #define inf 2000000007 #define mp make_pair #define pb push_back typedef long long ll; using namespace std; template inline void output(T a, int p) { if(p) cout << fixed << setprecision(p) << a << "\n"; else cout << a << "\n"; } // end of template struct cut { int cnt1, cnt2, sum2; }; bool isZero(cut c){ if(c.cnt1 == 0 && c.cnt2 == 0 && c.sum2 == 0) return true; return false; } int main() { cin.tie(0); ios::sync_with_stdio(0); // source code int d; cin >> d; rep(i, d){ int n1, n2, m; cin >> n1 >> n2 >> m; vector A(m); rep(i, m) cin >> A[i]; sort(all(A)); vector check(n1 + 1, {0, 0, 0}); vector tmp(n1 + 1, {0, 0, 0}); int ret = 0; rep(i, m){ if(i == 0){ if(A[i] <= n1) tmp[A[i]] = {1, 0, 0}; if(A[i] <= n2) tmp[0] = {0, 1, A[i]}; } else { rep(j, n1 + 1){ if(!isZero(check[j])){ if(j + A[i] <= n1) tmp[j + A[i]] = {check[j].cnt1 + 1, check[j].cnt2, check[j].sum2}; if(check[j].sum2 + A[i] <= n2) tmp[j] = {check[j].cnt1, check[j].cnt2 + 1, check[j].sum2 + A[i]}; } } } check = tmp; rep(j, n1 + 1) { ret = max(ret, check[j].cnt1 + check[j].cnt2); } } output(ret, 0); } return 0; }