Dim N as integer

Dim M as Integer

Dim P as Integer /* the given values of N, M, and P */

Dim SUM as Ingteger /* current sum */

Dim tsum as Integer /* temporary for a partial sum of newly added elements */

Dim count as Integer /* number of subsets whose SUM is < P

Dim i as Integer

Dim j as Integer

Dim S() as Integer /* Given set S -- not using array element 0 */

Dim c() as Integer

ReDim S(N+1)

ReDim c(M+1) /* indicates which indexes are in the current subset */

j = 1

count = 0

Sum = 0

c(1) = -1

for i= 1 to M /* loop sets initial subset and its SUM */

c(i) = i

SUM = SUM + S(i)

next

do while j > 0 AND SUM < P

count = count + 1

j = M

do while c(j) = (N - M + j) /* back up throwing elements out */

SUM = SUM - S(c(j]))

j = j - 1

loop

next_update: /* goto label */

SUM = SUM - S(c(j))

c(j) = c(j) + 1

tsum = S[c[j]];

for i = j+1 to M /* advance adding elements in */

c(i) = c(i-1) + 1

tsum = tsum + S(c(i))

next

if SUM + tsum >= P then

j = j - 1 /* backup 1 level */

if j <= 0 then

Exit Do

end if /* break out of while loop */

goto next_update

end if

SUM = SUM + tsum

loop

MsgBox "the number of subsets is," & count