#include<bits/stdc++.h>
using namespace std;
inline int read()
{
int res=0,f=1;char c=getchar();
while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9'){res=(res<<1)+(res<<3)+(c^48);c=getchar();}
return res*f;
}
void write(int x)
{
if(x<0){putchar('-');x=-x;}
if(x>9)write(x/10);
putchar(x%10+'0');
}
struct Query
{
int l,r,mid,id;
}que[1145141];
bool cmp(Query x,Query y)
{
return x.mid<y.mid;
}
int n,q,p;
int a[1000005];
int l[1000005],r[1000005],v[1000005];
int ans[1000005];
//-----------SegmentTreeBegin-----------
#define ls (root<<1)
#define rs (root<<1|1)
struct segt
{
int l,r,val;
int tag;
}t[1000005<<2];
inline void down(int root)
{
t[ls].tag|=t[root].tag;
t[rs].tag|=t[root].tag;
t[ls].val|=t[root].tag;
t[rs].val|=t[root].tag;
t[root].tag=0;
}
void bld(int l,int r,int root)
{
t[root].val=t[root].tag=0;
t[root].l=l;
t[root].r=r;
if(l==r)
{
t[root].val=a[l];
return;
}
int mid=(l+r)>>1;
bld(l,mid,ls);
bld(mid+1,r,rs);
t[root].val=t[ls].val|t[rs].val;
}
void add(int x,int y,int root,int k)
{
if(t[root].l>=x&&t[root].r<=y)
{
t[root].tag|=k;
t[root].val|=k;
return;
}
int mid=(t[root].l+t[root].r)>>1;
if(x<=mid)
add(x,y,ls,k);
if(y>mid)
add(x,y,rs,k);
t[root].val=t[ls].val|t[rs].val;
}
int query(int x,int root)
{
if(t[root].l==t[root].r)
return t[root].val|t[root].tag;
int mid=(t[root].l+t[root].r)>>1;
if(x<=mid)
return query(x,ls)|t[root].tag;
else
return query(x,rs)|t[root].tag;
}
//----------SegmentTreeEnd---------
int main()
{
n=read(),q=read(),p=read();
for(int i=1;i<=n;i++)
{
a[i]=read();
que[i].l=1;
que[i].r=q;
que[i].id=i;
ans[i]=-1;
}
for(int i=1;i<=q;i++)
l[i]=read(),r[i]=read(),v[i]=read();
for(int cnt=1;cnt<=20;cnt++)
{
bld(1,n,1);
for(int i=1;i<=n;i++)
que[i].mid=(que[i].l+que[i].r)>>1;
sort(que+1,que+n+1,cmp);
int cur=1;
for(int i=1;i<=q;i++)
{
if(que[i].l>que[i].r)
continue;
while(cur<=q&&cur<=que[i].mid)
{
add(l[cur],r[cur],1,v[cur]);
++cur;
}
if(query(que[i].id,1)>p)
{
ans[que[i].id]=que[i].mid;
que[i].r=que[i].mid-1;
}
else
que[i].l=que[i].mid+1;
}
}
for(int i=1;i<=n;i++)
write(ans[i]),putchar(' ');
}