# your code goes here
table=[0]*1001 # to store result
def close(a,b,c):
if abs(a-c)<abs(b-c): # to decide which number is closer to required number
return a
return b
def pay(length,k,m):
if k<=0 or k>m:
return 0
if table[k]!=0:
return table[k]
elif k in length:
return k
for i in range(len(length)):
l=length[0:i]+length[i+1:] #remove the element which is added
# print(l)
table[k]=close(table[k],length[i]+pay(l,k-length[i],m),k) #eg.element + value-element
if table[k]==m:
return m
return table[k]
for _ in range(int(input())):
nums,m=map(int,input().split())
lst=[]
for o in range(nums):
lst.append(int(input()))
print("************")
print(pay(lst,m,m))
IyB5b3VyIGNvZGUgZ29lcyBoZXJlCgp0YWJsZT1bMF0qMTAwMSAgIyB0byBzdG9yZSByZXN1bHQKCgpkZWYgY2xvc2UoYSxiLGMpOgoJaWYgYWJzKGEtYyk8YWJzKGItYyk6ICAjIHRvIGRlY2lkZSB3aGljaCBudW1iZXIgaXMgY2xvc2VyIHRvIHJlcXVpcmVkIG51bWJlcgoJCXJldHVybiBhCglyZXR1cm4gYgoKCmRlZiBwYXkobGVuZ3RoLGssbSk6CgoJaWYgazw9MCBvciBrPm06CgkJcmV0dXJuIDAKCglpZiB0YWJsZVtrXSE9MDoKCQlyZXR1cm4gdGFibGVba10KCgllbGlmIGsgaW4gbGVuZ3RoOgoJCXJldHVybiBrCgoJZm9yIGkgaW4gcmFuZ2UobGVuKGxlbmd0aCkpOgoJCWw9bGVuZ3RoWzA6aV0rbGVuZ3RoW2krMTpdICAgICAgICNyZW1vdmUgdGhlIGVsZW1lbnQgd2hpY2ggaXMgYWRkZWQKCQkjIHByaW50KGwpCgkJdGFibGVba109Y2xvc2UodGFibGVba10sbGVuZ3RoW2ldK3BheShsLGstbGVuZ3RoW2ldLG0pLGspICAjZWcuZWxlbWVudCArIHZhbHVlLWVsZW1lbnQKCQlpZiB0YWJsZVtrXT09bToKCQkJcmV0dXJuIG0KCglyZXR1cm4gdGFibGVba10KCgpmb3IgXyBpbiByYW5nZShpbnQoaW5wdXQoKSkpOgoJbnVtcyxtPW1hcChpbnQsaW5wdXQoKS5zcGxpdCgpKQoJbHN0PVtdCglmb3IgbyBpbiByYW5nZShudW1zKToKCQlsc3QuYXBwZW5kKGludChpbnB1dCgpKSkKCXByaW50KCIqKioqKioqKioqKioiKQoJcHJpbnQocGF5KGxzdCxtLG0pKQoK
NQozIDMKMQoxCjEKNSAxMQoxCjIKNAo4CjE2CjUgMjMKMQoyCjQKOAoxNgo1IDEzCjEKNQo1CjEwCjEwCjIwIDEzMgoxNwo2CjQKOTk4CjI1NAoxMzcKMjU5CjE1MwoxNTQKMwoyOAoxOQoxMjMKNTQyCjg1NwoyMwo2ODcKMzUKOTkKOTk5
5
3 3
1
1
1
5 11
1
2
4
8
16
5 23
1
2
4
8
16
5 13
1
5
5
10
10
20 132
17
6
4
998
254
137
259
153
154
3
28
19
123
542
857
23
687
35
99
999