#include <iostream> #include <cstdio> #include <cstring> using namespace std; int N,Q; int M,D; int num[210]; int tt; int dp[210][15][25]; void DP() { dp[0][0][0]=1; for(int i=1;i<=N;i++) { for(int j=0;j<=M;j++) { for(int k=0;k<D;k++) { dp[i][j][k]=dp[i-1][j][k];//as no element is added if(j) { int tmp = (D+k-num[i]%D)%D;//in case k-num[i]%10 is less than 0 , D is added dp[i][j][k]+=dp[i-1][j-1][tmp]; //from i-1 elemnts j-1 elements selected where previous remainder was //tmp } } } } } int main() { int kase=1,cnt=1; bool flag; while(scanf("%d%d",&N,&Q),N+Q) { for(int i=1;i<=N;i++) cin>>num[i]; flag = 1; cnt = 1; for(int i=1;i<=Q;i++) { cin>>D>>M; memset(dp,0,sizeof(dp)); DP(); if(flag) { cout<<"SET "<<kase++<<":\n"; flag = 0; } cout<<"QUERY "<<cnt++<<": "; cout<<dp[N][M][0]<<"\n"; } } return 0; }