import java.util.*; import java.io.*; public class MCPC09_C { Scanner in = new Scanner(System.in); public static void main(String[] args) { new MCPC09_C().solve(); } public void solve() { in = new Scanner("2 2 3\n500 600\n100 A\n200 B\n2 1 2\n5 4 8\n100 400 200 500 300\n250 AC\n360 ACE\n120 AB\n40 DE\n2 3 4 -3 1 2 -2 1\n0"); while(true) { String first = in.nextLine(); if(first.equals("0")) break; String[] temp = first.split(" "); int N = Integer.parseInt(temp[0]); int P = Integer.parseInt(temp[1]); int S = Integer.parseInt(temp[2]); temp = in.nextLine().split(" "); int[] dll_sizes = new int[N]; for(int i=0; i dlls_loaded = new TreeSet(); ArrayList progs_running = new ArrayList(); int max = 0; int curr = 0; for(String s : order) { int i = Integer.parseInt(s); if(i > 0) { i -= 1; // load a new copy of the prog progs_running.add(i); curr += prog_sizes[i]; for(int j=0; j max) max = curr; } else { i *= -1; i -= 1; progs_running.remove((Object)i); curr -= prog_sizes[i]; for(int j=0; j