#include <cstdio>
#include <cstring>
using namespace std;

typedef unsigned long long ULL;

ULL dp[200005];
int go[200005][65],W[405],T[405];

void output(int s, int m){
    if(m<0) return;
    int i=go[s][m];
    output(s-T[i],m-W[i]);
    if(m-W[i]>=0) putchar(' ');
    printf("%d",i);
}

int main(){
    int cs;
    scanf("%d",&cs);
    while(cs--){
        memset(dp,0,sizeof(dp));
        memset(go,0,sizeof(go));
        int n,q;
        scanf("%d%d",&n,&q);
        for(int i=1;i<=n;i++){
            scanf("%d%d",W+i,T+i);
            int w=W[i],t=T[i];
            for(int j=200000;j>t;j--){
                ULL mask=dp[j];
                dp[j]|=dp[j-t]<<w;
                for(ULL o=mask^dp[j];o;o=(o-1)&o)
                    go[j][__builtin_ctzll(o)]=i;
            }
            ULL c=1ull<<(w-1);
            if(~dp[t]&c) go[t][w-1]=i;
            dp[t]|=c;
        }
        for(int i=0;i<q;i++){
            int m,s;
            scanf("%d%d",&m,&s);
            if(go[s][m-1]) output(s,m-1); else printf("No solution!");
            puts("");
        }
    }
}
