#include <bits/stdc++.h>
using namespace std;
const int MaxN = 4000005;
const int oo = 1000000000;
const long long Base = 1000000007;
typedef int Tarr[MaxN];
Tarr Val, l, h, leaf, a, b;
bool Ok[MaxN];
int n, m, nb;
vector<int> v;
void Build(int x, int i, int j) {
  l[x] = i;
  h[x] = j;
  if (i == j) {
    leaf[i] = x;
    Val[x] = 1;
    return;
  }
  int m = (i + j) / 2;
  Build(x * 2, i, m);
  Build(x * 2 + 1, m + 1, j);
  Val[x] = Val[x * 2] + Val[x * 2 + 1];
}
int Find(int x, int v) {
  if (l[x] == h[x]) return l[x];
  if (Val[x * 2] >= v)
    return Find(x * 2, v);
  else
    return Find(x * 2 + 1, v - Val[x * 2]);
}
void Update(int i, int v) {
  int x = leaf[i];
  Val[x] += v;
  while (x / 2 > 0) {
    x /= 2;
    Val[x] = Val[x * 2] + Val[x * 2 + 1];
  }
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= m; i++) scanf("%d", &a[i]);
  Build(1, 1, 1000000);
  memset(Ok, 1, sizeof(Ok));
  int t = 0;
  int del = 0;
  for (int i = 1; i <= n; i++) {
    scanf("%d", &t);
    if (t == 1) b[++nb] = t;
    if (t == 0) b[++nb] = 0;
    if (t == -1) {
      v.resize(0);
      for (int j = 1; j <= m; j++) {
        if (a[j] > nb - del) break;
        int k = Find(1, a[j]);
        Ok[k] = 0;
        v.push_back(k);
      }
      for (int j = 0; j < v.size(); j++) {
        Update(v[j], -1);
        del++;
      }
    }
  }
  if (nb - del == 0)
    cout << "Poor stack!";
  else
    for (int i = 1; i <= nb; i++)
      if (Ok[i]) printf("%d", b[i]);
  return 0;
}
