#include <stdio.h>

int main(void) {
	#include <stdio.h>

int main(void) {
    int stasiun_cnt, robot_cnt;
    if (scanf("%d %d", &stasiun_cnt, &robot_cnt) != 2) return 0;
    
    long long harga_s[105];
    for (int x = 1; x <= stasiun_cnt; x++) {
        scanf("%lld", &harga_s[x]);
    }
    
    long long bobot_r[2005];
    for (int x = 1; x <= robot_cnt; x++) {
        scanf("%lld", &bobot_r[x]);
    }
    
    int slot_isi[105] = {0};
    int status_posisi[2005] = {0};
    
    int antrean[2005];
    int f_idx = 0, r_idx = 0;
    
    long long kas_bengkel = 0;
    
    int total_kejadian = 2 * robot_cnt;
    for (int ev = 0; ev < total_kejadian; ev++) {
        int log_ev;
        scanf("%d", &log_ev);
        
        if (log_ev > 0) {
            int cur_r = log_ev;
            
            int target_slot = -1;
            for (int s = 1; s <= stasiun_cnt; s++) {
                if (slot_isi[s] == 0) {
                    target_slot = s;
                    break;
                }
            }
            
            if (target_slot != -1) {
                slot_isi[target_slot] = cur_r;
                status_posisi[cur_r] = target_slot;
                kas_bengkel += bobot_r[cur_r] * harga_s[target_slot];
            } else {
                antrean[r_idx++] = cur_r;
            }
            
        } else {
            int cur_r = -log_ev;
            
            int released_slot = status_posisi[cur_r];
            slot_isi[released_slot] = 0;
            status_posisi[cur_r] = 0;
            
            if (f_idx < r_idx) {
                int next_r = antrean[f_idx++];
                slot_isi[released_slot] = next_r;
                status_posisi[next_r] = released_slot;
                kas_bengkel += bobot_r[next_r] * harga_s[released_slot];
            }
        }
    }
    
    printf("%lld\n", kas_bengkel);
    return 0;
}
}
