#include <iostream>
#include <vector>
#include <queue>
#include <map>
using namespace std;
int main() {
int N, M, total = 0;
cin >> N >> M;
vector<int> fee(N);
map <int, int> place;
for(int i=0; i<N; i++) {
cin >> fee[i];
place[i] = 0;
}
vector<int> car(M+1);
for(int i=1; i<=M; i++) {
cin >> car[i];
}
queue <pair<int, int>> parking;
queue <int> waiting;
for(int i=0; i<2*M; i++) {
int num;
cin >> num;
if(num > 0) {
waiting.push(num);
for (auto p : place) {
if(p.second == 0) {
parking.push({waiting.front(), p.first});
place[p.first]++;
waiting.pop();
break;
}
}
}
else {
int n = parking.size();
while(n--) {
int car_num = parking.front().first;
int x = parking.front().second;
if((num * -1) == car_num) {
total += car[car_num] * fee[x];
place[x] = 0;
}
else {
parking.push(parking.front());
}
parking.pop();
}
if(waiting.empty()) continue;
for (auto p : place) {
if(p.second == 0) {
parking.push({waiting.front(), p.first});
place[p.first]++;
break;
}
}
waiting.pop();
}
}
cout << total;
return 0;
}