#include <bits/stdc++.h>
using namespace std;
template <class T>
bool uin(T &a, T b) {
  return a > b ? (a = b, true) : false;
}
template <class T>
bool uax(T &a, T b) {
  return a < b ? (a = b, true) : false;
}
const long long P = 998244353;
long long deg(long long x, long long d) {
  if (d < 0) d += P - 1;
  long long y = 1;
  while (d) {
    if (d & 1) (y *= x) %= P;
    (x *= x) %= P;
    d /= 2;
  }
  return y;
}
struct TRes {
  long long ans;
  long long pl, sr;
  bool ch;
  TRes operator+(const TRes &r) const {
    long long nans = (ans + r.ans) % P;
    if (r.ch) (nans += sr * r.pl) %= P;
    long long npl = pl * (ch ? 1LL : r.pl) % P;
    long long nsr = (r.sr + (r.ch ? 0LL : r.pl * sr)) % P;
    return {nans, npl, nsr, ch || r.ch};
  }
};
struct TNode {
  int L, R;
  int l, r;
  TRes res;
};
const int maxt = 510000;
TNode t[maxt];
int tc = 0;
long long p[maxt];
int ch[maxt];
void relax(int node) {
  TNode &n = t[node];
  n.res = t[n.l].res + t[n.r].res;
}
TRes init(int i) {
  if (ch[i]) return {0, 1, deg(p[i], -1), 1};
  return {0, deg(p[i], -1), deg(p[i], -1), 0};
}
int buildTree(int L, int R) {
  int node = tc++;
  TNode &n = t[node];
  n = {L, R, -1, -1, {}};
  if (R - L == 1)
    n.res = init(L);
  else {
    int M = (L + R) / 2;
    n.l = buildTree(L, M);
    n.r = buildTree(M, R);
    relax(node);
  }
  return node;
}
void change(int node, int i) {
  TNode &n = t[node];
  if (i < n.L || i >= n.R) return;
  if (n.R - n.L == 1) {
    ch[i] ^= 1;
    n.res = init(i);
    return;
  }
  change(n.l, i);
  change(n.r, i);
  relax(node);
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.precision(10);
  cout << fixed;
  int n, q;
  cin >> n >> q;
  for (int i = 0; i < (int)(n); ++i) {
    cin >> p[i];
    (p[i] *= deg(100, -1)) %= P;
  }
  ch[0] = ch[n] = 1;
  int root = buildTree(0, n + 1);
  for (int i = 0; i < (int)(q); ++i) {
    int x;
    cin >> x;
    change(root, --x);
    long long ans = t[root].res.ans;
    if (ans < 0) ans += P;
    cout << ans << '\n';
  }
  return 0;
}
