#include <bits/stdc++.h>
typedef unsigned long long ull;
using namespace std;
const int INF = (1 << 29);
const int MAX = 1000009;
int tree[4 * MAX];
int n, m;
vector<int> V;
int col[MAX], ans[MAX];
void build(int node, int l, int r) {
  if (l == r) {
    tree[node] = 1;
    return;
  }
  int mid = (l + r) / 2;
  build(node * 2, l, mid);
  build(node * 2 + 1, mid + 1, r);
  tree[node] = tree[node * 2] + tree[node * 2 + 1];
  return;
}
int Query(int node, int left, int right, int pos) {
  if (left == right) return left;
  int mid = (left + right) / 2;
  if (tree[node * 2] >= pos)
    return Query(node * 2, left, mid, pos);
  else
    return Query(node * 2 + 1, mid + 1, right, pos - tree[node * 2]);
}
void update(int node, int left, int right, int pos) {
  if (left == right) {
    tree[node]--;
    return;
  }
  int mid = (left + right) / 2;
  if (pos <= mid)
    update(node * 2, left, mid, pos);
  else
    update(node * 2 + 1, mid + 1, right, pos);
  tree[node] = tree[node * 2] + tree[node * 2 + 1];
  return;
}
int main() {
  scanf("%d %d", &n, &m);
  for (int i = 0, x; i < m; i++) {
    scanf("%d", &x);
    V.push_back(x);
  }
  build(1, 1, n);
  memset(col, 0, sizeof(col));
  int curlen = 0, x, pos = 0;
  for (int i = 0; i < n; i++) {
    scanf("%d", &x);
    if (x == 1 || x == 0) {
      ans[++pos] = x;
      ++curlen;
    } else {
      int nowtot = curlen;
      for (int j = 0; j < (int)V.size(); j++) {
        if (nowtot >= V[j]) {
          int nowid = Query(1, 1, n, V[j] - j);
          col[nowid] = 1;
          update(1, 1, n, nowid);
          curlen--;
        } else
          break;
      }
    }
  }
  if (!curlen)
    puts("Poor stack!");
  else {
    for (int i = 1; i <= pos; i++) {
      if (!col[i]) {
        printf("%d", ans[i]);
      }
    }
    puts("");
  }
  return 0;
}
