def main(): import sys input = sys.stdin.read data = input().split() N = int(data[0]) items = [] idx = 1 for i in range(N): c = int(data[idx]) v = int(data[idx+1]) items.append((i+1, c, v)) idx += 2 item1 = items[0] others = items[1:] dp2 = [[-float('inf')] * (N + 1) for _ in range(N + 1)] dp2[0][0] = 0 for i in range(1, N): current_i = others[i-1] weight_i = current_i[0] count_i = current_i[1] value_i = current_i[2] for y in range(N, -1, -1): for w in range(N, -1, -1): if dp2[y][w] == -float('inf'): continue max_x = min(count_i, (N - w) // weight_i) for x in range(1, max_x + 1): new_y = y + x new_w = w + weight_i * x if new_y > N or new_w > N: break new_val = dp2[y][w] + x * value_i if new_val > dp2[new_y][new_w]: dp2[new_y][new_w] = new_val max_val = [[-float('inf')] * (N + 1) for _ in range(N + 1)] for y in range(N + 1): current_max = -float('inf') for w in range(N + 1): if dp2[y][w] > current_max: current_max = dp2[y][w] max_val[y][w] = current_max result = [0] * (N + 1) c1 = item1[1] v1 = item1[2] for k in range(1, N + 1): max_total = -float('inf') max_y = k min_x = max(0, k - (N - 0)) x_start = max(0, k - (N - 0)) x_end = min(c1, k) for x in range(x_start, x_end + 1): y = k - x if y < 0: continue w_max = N - x if w_max < 0: continue if y > N: continue if w_max > N: w_max = N if max_val[y][w_max] == -float('inf'): continue total = x * v1 + max_val[y][w_max] if total > max_total: max_total = total result[k] = max_total for k in range(1, N + 1): print(result[k]) if __name__ == "__main__": main()