function subsets (id, pr, n, a):

  power := 1
  for i := 0 until n-1:
    power *= 3

  modulo := 1000000007

  lo := power * id / pr
  hi := power * (id + 1) / pr

  local_max_prod := 0

  for i := lo until hi:
    aa := 0
    bb := 0
    curi := i

    for j := 1 until n:
      if curi % 3 == 1:
        aa += a[j]
      elif curi % 3 == 2:
        bb += a[j]
      curi /= 3

    aa %= modulo
    bb %= modulo

    mm := aa * bb
    mm %= modulo

    if local_max_prod < mm:
      local_max_prod := mm

    mm := ((aa + a[0]) % modulo) * bb
    mm %= modulo

    if local_max_prod < mm:
      local_max_prod := mm

    mm := aa * ((bb + a[0]) % modulo)
    mm %= modulo

    if local_max_prod < mm:
      local_max_prod := mm

  send (0, local_max_prod)

  if id == 0:
    r := 0
    for k := 0 until pr:
      x := receive (k)
      if r < x:
        r := x
    print (r)
 


                  