import networkx as nx N=int(input()) L = [] R = [] for _ in range(N): a,b=map(int,input().split()) a,b=a-1,b-1 L.append(a) R.append(b) A = [0] + list(map(int,input().split())) for i in range(2*N-1): A[i+1] += A[i] G = nx.Graph() edges = [] for i in range(N): for j in range(N): if i == j: continue if L[i] < L[j] < R[i] < R[j]: edges.append((i, j, A[R[i]] - A[L[j]])) G.add_weighted_edges_from(edges) match = nx.max_weight_matching(G) wt = 0 for a,b,c in edges: if (a,b) in match or (b,a) in match: wt += c ANS = 0 for i in range(N): print(L[i],R[i]) ANS += A[R[i]] - A[L[i]] ANS -= wt print(ANS)