1 #include<iostream>
2 #include<cstdio>
3 #include<algorithm>
4 #include<cstring>
5 #define N 100005
6 using namespace std;
7 int n,m;
8 int c[N],now;
9 struct node
10 {
11 int l,r,sum;
12 }a[N*20];int cnt;
13 void add(int x,int l,int r,int z)
14 {
15 if(l==r)
16 {
17 a[x].sum++;
18 return ;
19 }
20 int mid=(l+r)>>1;
21 if(z<=mid)
22 {
23 if(!a[x].l)a[x].l=++cnt;
24 add(a[x].l,l,mid,z);
25 }
26 else
27 {
28 if(!a[x].r)a[x].r=++cnt;
29 add(a[x].r,mid+1,r,z);
30 }
31 a[x].sum=a[a[x].l].sum+a[a[x].r].sum;
32 return ;
33 }
34 int f[N];
35 int find(int x)
36 {
37 if(f[x]==x)return x;
38 return f[x]=find(f[x]);
39 }
40 int la=0;
41 int root[N];
42 void del(int x,int l,int r,int z)
43 {
44 if(l==r)
45 {
46 la+=a[x].sum;
47 a[x].sum=0;
48 return ;
49 }
50 int mid=(l+r)>>1;
51 if(z<=mid)
52 {
53 if(a[a[x].l].sum)del(a[x].l,l,mid,z);
54 }
55 if(a[a[x].r].sum)del(a[x].r,mid+1,r,z);
56 a[x].sum=a[a[x].l].sum+a[a[x].r].sum;
57 return ;
58 }
59 void merge(int x,int y,int l,int r)
60 {
61 if(l==r)
62 {
63 a[x].sum+=a[y].sum;
64 return ;
65 }
66 int mid=(l+r)>>1;
67 if(a[x].l)
68 {
69 if(a[y].l)merge(a[x].l,a[y].l,l,mid);
70 }
71 else a[x].l=a[y].l;
72 if(a[x].r)
73 {
74 if(a[y].r)merge(a[x].r,a[y].r,mid+1,r);
75 }
76 else a[x].r=a[y].r;
77 a[x].sum=a[a[x].r].sum+a[a[x].l].sum;
78 return ;
79 }
80 int main()
81 {
82 scanf("%d%d",&n,&m);
83 for(int i=1;i<=n;i++)scanf("%d",&c[i]);
84 for(int i=0;i<=n;i++)root[i]=++cnt;
85 for(int i=1;i<=n;i++)f[i]=i;
86 int t1,t2;
87 for(int i=1;i<=m;i++)
88 {
89 scanf("%d%d",&t1,&t2);
90 add(root[t2],1,n,t1);
91 }
92 int q;scanf("%d",&q);
93
94 for(int i=1;i<=q;i++)
95 {
96 scanf("%d",&t1);
97 t1=(t1-1+la)%n+1;
98 c[t1]--;
99 if(c[t1]==0)
100 {
101 f[t1]=t1-1;
102 int aa=find(t1);
103 del(root[t1],1,n,aa+1);
104 merge(root[aa],root[t1],1,n);
105 }
106 printf("%d\n",la);
107 }
108 return 0;
109 }