#include <bits/stdc++.h>
using namespace std;
int PASSED_POINT = 0;
void Duxar() {}
void read_int(int &value) {
  int sign = 1;
  char ch;
  value = 0;
  while (!isdigit(ch = getchar())) {
    (ch == '-') && (sign = -1);
  }
  do {
    value = value * 10 + (ch - '0');
  } while (isdigit(ch = getchar()));
  value *= sign;
}
int N, M;
vector<int> hero, state;
vector<pair<int, int> > actionTeam;
int nr_bits(int x) {
  int ans = 0;
  while (x) {
    ans += (x & 1);
    x >>= 1;
  }
  return ans;
}
int main() {
  int i, mask, act;
  string s;
  read_int(N);
  hero.resize(N);
  for (i = 0; i < N; ++i) {
    read_int(hero[i]);
  }
  sort((hero).rbegin(), (hero).rend());
  read_int(M);
  state.resize((1 << M) - 1);
  actionTeam.resize(M);
  for (i = 0; i < M; ++i) {
    cin >> s >> actionTeam[i].second;
    actionTeam[i].first = 0;
    if (s[0] == 'p') actionTeam[i].first = 1;
  }
  state[(1 << M) - 1] = 0;
  for (mask = (1 << M) - 2; mask >= 0; --mask) {
    act = nr_bits(mask);
    if (actionTeam[act].second == 1) {
      state[mask] = -1000000007;
      for (i = 0; i < M; ++i) {
        if ((mask & (1 << i)) == 0) {
          state[mask] = max(state[mask], state[mask | (1 << i)] +
                                             actionTeam[act].first * hero[i]);
        }
      }
    } else {
      state[mask] = 1000000007;
      for (i = 0; i < M; ++i) {
        if ((mask & (1 << i)) == 0) {
          state[mask] = min(state[mask], state[mask | (1 << i)] -
                                             actionTeam[act].first * hero[i]);
        }
      }
    }
  }
  printf("%d\n", state[0]);
  return 0;
}
