#include<bits/stdc++.h>
#define lc (p<<1)
#define rc (p<<1|1)
using namespace std;
const int N=2e5+5,P=10007;
struct Seg{int l,r,c;}tr[N<<2];
struct Q{int op,x,y;}qry[N];
int n,m,K,a[N],ans[N];
void bt(int p,int l,int r){
tr[p]={l,r,0};
if(l==r)return;
int mid=l+r>>1;
bt(lc,l,mid);bt(rc,mid+1,r);
}
void change(int p,int l,int r,int k){
if(l<=tr[p].l&&r>=tr[p].r){
tr[p].c=(tr[p].c+k)%P;
return;
}
int mid=tr[p].l+tr[p].r>>1;
if(l<=mid)change(lc,l,r,k);
if(r>mid)change(rc,l,r,k);
}
int solve(int p,int x){
if(tr[p].l==tr[p].r)return tr[p].c;
tr[lc].c=(tr[lc].c+tr[p].c)%P;
tr[rc].c=(tr[rc].c+tr[p].c)%P;
tr[p].c=0;
int mid=tr[p].l+tr[p].r>>1;
if(x<=mid)return solve(lc,x);
return solve(rc,x);
}
int main(){
int n,m,K;scanf("%d%d%d",&n,&m,&K);
for(int i=1;i<=K;i++){
int x;scanf("%d",&x);
a[x]=(a[x]+1)%P;
}
for(int i=1;i<=m;i++){
int op,x,y;scanf("%d%d%d",&op,&x,&y);
qry[i]={op,x,y};
}
bt(1,1,n);
for(int i=m;i>=1;i--){
if(qry[i].op==1)change(1,i,i,a[i]);
else{
int t=solve(1,i);
change(1,qry[i].x,qry[i].y,(t+a[i])%P);
}
}
for(int i=1;i<=m;i++){
if(qry[i].op==1){
(ans[qry[i].x]+=solve(1,i)*qry[i].y%P)%=P;
}
}
for(int i=1;i<=n;i++)printf("%d ",ans[i]);
return 0;
}