#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;
}