#include <bits/stdc++.h>
using namespace std;
const int y = 0;
const int yy = 1;
struct Node {
  int left, right, val, key, size;
  void init() {
    left = right = 0;
    size = 1;
  }
} node[1000010];
int sum, a[1000010], ans[1000010];
int root, tot;
void init() { root = tot = 0; }
void Right_Rotate(int &t) {
  int k = node[t].left;
  node[t].left = node[k].right;
  node[k].right = t;
  node[k].size = node[t].size;
  node[t].size = node[node[t].left].size + node[node[t].right].size + 1;
  t = k;
  return;
}
void Left_Rotate(int &t) {
  int k = node[t].right;
  node[t].right = node[k].left;
  node[k].left = t;
  node[k].size = node[t].size;
  node[t].size = node[node[t].left].size + node[node[t].right].size + 1;
  t = k;
  return;
}
void Maintain(int &t, bool flag) {
  if (flag == 0) {
    if (node[node[node[t].left].left].size > node[node[t].right].size)
      Right_Rotate(t);
    else if (node[node[node[t].left].right].size > node[node[t].right].size) {
      Left_Rotate(node[t].left);
      Right_Rotate(t);
    } else
      return;
  } else {
    if (node[node[node[t].right].right].size > node[node[t].left].size)
      Left_Rotate(t);
    else if (node[node[node[t].right].left].size > node[node[t].left].size) {
      Right_Rotate(node[t].right);
      Left_Rotate(t);
    } else
      return;
  }
  Maintain(node[t].left, 0);
  Maintain(node[t].right, 1);
  Maintain(t, 0);
  Maintain(t, 1);
  return;
}
void insert(int &t, const int &v) {
  if (t == 0) {
    t = ++tot;
    node[t].init();
    node[t].val = t;
    node[t].key = v;
  } else {
    node[t].size++;
    insert(node[t].right, v);
    Maintain(t, 1);
  }
  return;
}
int select(int &t, int k) {
  if (node[node[t].left].size == k - 1)
    return t;
  else if (node[node[t].left].size >= k)
    return select(node[t].left, k);
  else
    return select(node[t].right, k - node[node[t].left].size - 1);
}
int delet(int &t, const int &v) {
  if (t == 0) return 0;
  node[t].size--;
  if ((node[t].val == v) || (node[t].val > v && (!node[t].left)) ||
      (node[t].val < v && (!node[t].right))) {
    if (node[t].right && node[t].left) {
      int p = delet(node[t].left, v + 1);
      node[t].val = node[p].val;
      node[t].key = node[p].key;
      return p;
    } else {
      int p = t;
      t = node[t].left + node[t].right;
      return p;
    }
  } else {
    if (node[t].val > v)
      return delet(node[t].left, v);
    else
      return delet(node[t].right, v);
  }
}
void dfs(int &t) {
  if (t == 0) return;
  dfs(node[t].left);
  ans[++sum] = node[t].key;
  dfs(node[t].right);
  return;
}
int main() {
  int n, m, i, x, l, j, yyy;
  node[0].size = 0;
  scanf("%d%d", &n, &m);
  for (i = 1; i <= m; i++) scanf("%d", &a[i]);
  init();
  for (i = 1; i <= n; i++) {
    scanf("%d", &x);
    if (x == 0)
      insert(root, y);
    else if (x == 1)
      insert(root, yy);
    else {
      l = node[root].size;
      for (j = 1; j <= m; j++) {
        if (a[j] > l) break;
        x = select(root, a[j] - j + 1);
        yyy = delet(root, node[x].val);
      }
    }
  }
  sum = 0;
  dfs(root);
  if (sum == 0)
    printf("Poor stack!\n");
  else {
    for (i = 1; i <= sum; i++) printf("%d", ans[i]);
    printf("\n");
  }
  return 0;
}
