#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; /*** typedef ***/ #define MEMSET_INF 127 #define MEMSET_HALF_INF 63 #define stream istringstream #define rep(i,n) for(__typeof(n) i=0; i<(n); i++) #define repl(i,n) for(__typeof(n) i=1; i<=(n); i++) #define FOR(i,a,b) for(__typeof(b) i=(a); i<=(b); i++) #define INF (1<<30) #define PI acos(-1.0) #define pb push_back #define ppb pop_back #define all(x) x.begin(),x.end() #define mem(x,y) memset(x,y,sizeof(x)) #define memsp(x) mem(x,MEMSET_INF) #define memdp(x) mem(x,-1) #define memca(x) mem(x,0) #define eps 1e-9 #define pii pair #define pmp make_pair #define ft first #define sd second #define vi vector #define vpii vector #define si set #define msi map #define mis map typedef long long i64; typedef unsigned long long ui64; /** function **/ #define SDi(x) sf("%d",&x) #define SDs(x) sf("%s",x) #define SD2(x,y) sf("%d%d",&x,&y) #define pf printf #define print(x) pf("%d ", x) #define println(x) pf("%d\n", x) #define sf scanf #define READ(f) freopen(f, "r", stdin) #define WRITE(f) freopen(f, "w", stdout) /** Main Code **/ #define Max 201 #define Query_N 11 #define MOD 21 int N, Q, D, M, data[Max], cache[Max][Query_N][MOD]; bool visited[Max][Query_N][MOD]; int knapsack(int indx, int taken, int sumModD) { if(indx == N + 1) return 0; if(taken == 0) { if(sumModD == 0) return 1; return 0; } if(visited[indx][taken][sumModD]) return cache[indx][taken][sumModD]; visited[indx][taken][sumModD] = true; return cache[indx][taken][sumModD] = knapsack(indx + 1, taken - 1, (sumModD + data[indx]) % D) + knapsack(indx + 1, taken, sumModD); } int main() { #ifndef ONLINE_JUDGE READ("input.txt"); #endif int caseNo = 0, queryNo; while(SD2(N, Q) && N && Q) { mem(visited, false); rep(i, N) SDi(data[i]); pf("SET %d:\n", ++caseNo); queryNo = 0; rep(i, Q) { SD2(D, M); pf("QUERY %d: %d\n", ++queryNo, knapsack(0, M, 0)); } } return 0; }