#include <bits/stdc++.h>
using namespace std;
template <class T, size_t N>
ostream& operator<<(ostream& os, const array<T, N>& v);
template <class T1, class T2>
ostream& operator<<(ostream& os, const pair<T1, T2>& p) {
  return os << "(" << p.first << ", " << p.second << ")";
}
template <class T>
ostream& operator<<(ostream& os, const vector<T>& v) {
  bool f = 1;
  os << "[";
  for (auto& i : v) {
    if (!f) os << ", ";
    os << i;
    f = 0;
  }
  return os << "]";
}
template <class T, size_t N>
ostream& operator<<(ostream& os, const array<T, N>& v) {
  bool f = 1;
  os << "[";
  for (auto& i : v) {
    if (!f) os << ", ";
    os << i;
    f = 0;
  }
  return os << "]";
}
template <class T1, class T2>
ostream& operator<<(ostream& os, const set<T1, T2>& v) {
  bool f = 1;
  os << "[";
  for (auto& i : v) {
    if (!f) os << ", ";
    os << i;
    f = 0;
  }
  return os << "]";
}
template <class T1, class T2>
ostream& operator<<(ostream& os, const multiset<T1, T2>& v) {
  bool f = 1;
  os << "[";
  for (auto& i : v) {
    if (!f) os << ", ";
    os << i;
    f = 0;
  }
  return os << "]";
}
template <class T1, class T2, class T3>
ostream& operator<<(ostream& os, const map<T1, T2, T3>& v) {
  bool f = 1;
  os << "[";
  for (auto& ii : v) {
    if (!f) os << ", ";
    os << "(" << ii.first << " -> " << ii.second << ") ";
    f = 0;
  }
  return os << "]";
}
template <class T1, class T2>
ostream& operator<<(ostream& os, const multimap<T1, T2>& v) {
  bool f = 1;
  os << "[";
  for (auto& ii : v) {
    if (!f) os << ", ";
    os << "(" << ii.first << " -> " << ii.second << ") ";
    f = 0;
  }
  return os << "]";
}
template <class T1, class T2>
ostream& operator<<(ostream& os, priority_queue<T1, T2> v) {
  bool f = 1;
  os << "[";
  while (!v.empty()) {
    auto x = v.top();
    v.pop();
    if (!f) os << ", ";
    f = 0;
    os << x;
  }
  return os << "]";
}
template <class T1, class T2>
void printarray(const T1& a, T2 sz, T2 beg = 0) {
  for (T2 i = beg; i < sz; i++) cout << a[i] << " ";
  cout << endl;
}
int N, M;
int s[105], type[105], idx[105];
int dp[20][1 << 20];
bool vis[20][1 << 20];
int K;
int solve(int m, int mask) {
  if (m == M - 1) {
    if (type[m] == -1) return 0;
    for (int i = 0; i < K; i++) {
      if (mask & (1 << i)) continue;
      return s[i];
    }
    return 0;
  }
  if (vis[m][mask]) return dp[m][mask];
  vis[m][mask] = true;
  int& res = dp[m][mask];
  int t = (idx[m] != idx[m + 1]) ? -1 : 1;
  res = -1e9;
  if (type[m] == 1) {
    for (int i = 0; i < K; i++) {
      if (mask & (1 << i)) continue;
      res = max(res, s[i] + t * solve(m + 1, mask | (1 << i)));
      break;
    }
  } else {
    for (int i = 0; i < K; i++) {
      if (mask & (1 << i)) continue;
      res = max(res, t * solve(m + 1, mask | (1 << i)));
    }
    res = max(res, t * solve(m + 1, mask));
  }
  return dp[m][mask];
}
int main() {
  scanf("%d", &N);
  for (int i = 0; i < N; i++) scanf("%d", s + i);
  sort(s, s + N, greater<int>());
  scanf("%d", &M);
  for (int i = 0; i < M; i++) {
    char buf[10];
    scanf("%s%d", buf, &idx[i]);
    if (buf[0] == 'p')
      type[i] = 1;
    else
      type[i] = -1;
  }
  K = min(N, M);
  vector<int> mlist;
  for (int m = M - 1; m >= 0; m--) {
    for (int mask = 0; mask < (1 << K); mask++) {
      vis[m][mask] = 1;
      dp[m][mask] = -1e9;
      if (m == M - 1) {
        if (mask == ((1 << K) - 1)) continue;
        if (type[m] == -1) {
          dp[m][mask] = 0;
          continue;
        }
        int mx = 0;
        for (int i = 0; i < K; i++) {
          if (mask & (1 << i)) continue;
          mx = s[i];
          break;
        }
        dp[m][mask] = mx;
        continue;
      }
      int t = (idx[m] != idx[m + 1]) ? -1 : 1;
      if (type[m] == 1) {
        for (int i = 0; i < K; i++) {
          if (mask & (1 << i)) continue;
          dp[m][mask] = max(dp[m][mask], s[i] + t * dp[m + 1][mask | (1 << i)]);
          break;
        }
      } else {
        for (int i = 0; i < K; i++) {
          if (mask & (1 << i)) continue;
          dp[m][mask] = max(dp[m][mask], t * dp[m + 1][mask | (1 << i)]);
        }
        dp[m][mask] = max(dp[m][mask], t * dp[m + 1][mask]);
      }
    }
  }
  if (idx[0] == 1)
    printf("%d\n", dp[0][0]);
  else
    printf("%d\n", -dp[0][0]);
}
