#include <bits/stdc++.h>
using namespace std;
long long n, q, mod = 998244353;
long long p[200005];
set<long long> s;
struct frac {
  long long a, b;
  frac operator+(frac o) {
    long long tu = (a * o.b + b * o.a + mod * mod) % mod, mau = (b * o.b) % mod;
    return {tu, mau};
  }
  frac operator-(frac o) {
    long long tu = (a * o.b - b * o.a + mod * mod) % mod, mau = (b * o.b) % mod;
    return {tu, mau};
  }
  frac operator*(frac o) {
    long long tu = (a * o.a) % mod, mau = (b * o.b) % mod;
    return {tu, mau};
  }
};
frac lol[200005];
struct node {
  frac a, b;
  node operator+(node o) { return {a * o.a, b * o.a + o.b}; }
};
node it[800005];
void build_tree(long long id, long long l, long long r) {
  if (l == r) {
    it[id] = {{lol[r]}, {lol[r]}};
    return;
  }
  long long mid = (l + r) / 2;
  build_tree(id * 2, l, mid);
  build_tree(id * 2 + 1, mid + 1, r);
  it[id] = it[id * 2] + it[id * 2 + 1];
}
node get(long long id, long long l, long long r, long long u, long long v) {
  node now = {{1, 1}, {0, 1}};
  if (l > v || r < u)
    return now;
  else if (l >= u && r <= v)
    return it[id];
  long long mid = (l + r) / 2;
  if (mid >= u) now = now + get(id * 2, l, mid, u, v);
  if (mid < v) now = now + get(id * 2 + 1, mid + 1, r, u, v);
  return now;
}
long long binpow(long long a, long long b) {
  long long res = 1, cac = a;
  while (b) {
    if (b & 1) {
      res = (res * cac) % mod;
    }
    b >>= 1;
    cac = (cac * cac) % mod;
  }
  return res;
};
long long rev_mod(long long x) { return binpow(x, mod - 2); }
signed main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> q;
  for (long long i = 1; i <= n; i++) {
    cin >> p[i];
    lol[i] = {100, p[i]};
  }
  build_tree(1, 1, n);
  frac ans = it[1].b;
  s.insert(1);
  for (long long i = 1; i <= q; i++) {
    long long pos;
    cin >> pos;
    if (s.count(pos)) {
      set<long long>::iterator it = s.find(pos);
      long long nxt = 0, lst = 0, nw = *it;
      if (next(it, 1) == s.end())
        nxt = n + 1;
      else
        nxt = *next(it, 1);
      lst = *--it;
      ans = ans + get(1, 1, n, lst, nxt - 1).b;
      ans = ans - get(1, 1, n, lst, nw - 1).b;
      ans = ans - get(1, 1, n, nw, nxt - 1).b;
      s.erase(pos);
    } else {
      set<long long>::iterator it = s.insert(pos).first;
      long long nxt = 0, lst = 0, nw = *it;
      if (next(it, 1) == s.end())
        nxt = n + 1;
      else
        nxt = *next(it, 1);
      lst = *--it;
      ans = ans - get(1, 1, n, lst, nxt - 1).b;
      ans = ans + get(1, 1, n, lst, nw - 1).b;
      ans = ans + get(1, 1, n, nw, nxt - 1).b;
    }
    cout << (ans.a * rev_mod(ans.b)) % mod << '\n';
  }
}
