#include<bits/stdc++.h>
typedef long long i64;
int p,n,m,f[30007],ep=0;
int gf(int x){
while(x!=f[x])x=f[x]=x[f][f];
return x;
}
void mg(int a,int b){
f[gf(a)]=gf(b);
}
struct pos{
int x,y;
void R(){scanf("%d%d",&x,&y);}
pos operator+(pos w)const{return (pos){x+w.x,y+w.y};}
pos operator-(pos w)const{return (pos){x-w.x,y-w.y};}
i64 operator*(pos w)const{return i64(x)*w.y-i64(y)*w.x;}
}ps[15];
struct edge{
int to,v;
double a;
pos p;
int i1,i2;
bool operator<(const edge&e)const{
return fabs(a-e.a)<0.5?p*e.p>0:a<e.a;
}
};
int min(int a,int b){return a<b?a:b;}
int max(int a,int b){return a>b?a:b;}
struct seg{
pos p1,p2;
int i1,i2;
double at(double x)const{
int d=p2.x-p1.x;
return d?((x-p1.x)*p2.y+(p2.x-x)*p1.y)/d:p1.y;
}
bool operator<(const seg&w)const{
double x1=(max(p1.x,w.p1.x)+min(p2.x,w.p2.x))*.5;
return at(x1)<w.at(x1);
}
};
struct event{
int tp,x,id1,id2;
bool operator<(const event&e)const{return x<e.x||x==e.x&&tp<e.tp;}
void cal();
}ev[50007];
int evp=0;
struct vertex{
pos p;
std::vector<edge>e;
void R(){p.R();}
void ae(int,int,int,int);
void init();
seg getseg(int w){
return (seg){p,e[w].p+p,e[w].i1,e[w].i2};
}
}ns[111];
void vertex::ae(int to,int v,int id1,int id2){
pos d=ns[to].p-p;
e.push_back((edge){to,v,atan2(d.y,d.x),d,id1,id2});
}
void vertex::init(){
edge*es=e.data();
int ec=e.size();
if(ec){
std::sort(es,es+ec);
for(int i=1;i<ec;++i)mg(es[i-1].i2,es[i].i1);
mg(es[ec-1].i2,es[0].i1);
for(int i=0;i<ec;++i)if(es[i].p.x>0){
ev[evp++]=(event){1,p.x,this-ns,i};
ev[evp++]=(event){-1,p.x+es[i].p.x,this-ns,i};
}
}
}
std::set<seg>ln;
std::set<seg>::iterator it,il,ir,its[50007];
int itp=0;
void event::cal(){
if(tp==-1){
seg s=ns[id1].getseg(id2);
ln.erase(ln.find(s));
}else if(tp==2){
it=ln.lower_bound((seg){ps[id1],ps[id1]});
mg(id1+1,it!=ln.end()?it->i1:0);
mg(it!=ln.begin()?(--it)->i2:0,id1+1);
}else{
seg s=ns[id1].getseg(id2);
its[itp++]=ln.insert(s).first;
}
}
int id[50007],idp=0,ans[15];
namespace mxf{
const int N=300007,inf=0x3f3f3f3f;
struct edge{
int to,nx,v;
}e[N];
int e0[N],ep=2,h[N],q[N],S,T;
void ae(int a,int b,int c,int c2){
if(!a||!b||a==b||c+c2==0)return;
e[ep]=(edge){b,e0[a],c};e0[a]=ep++;
e[ep]=(edge){a,e0[b],c2};e0[b]=ep++;
}
int min(int a,int b){return a<b?a:b;}
bool bfs(){
for(int i=1;i<=idp;++i)h[i]=0;
int ql=0,qr=0;
h[q[++qr]=S]=1;
while(ql!=qr){
int w=q[++ql];
if(w==T)return 1;
for(int i=e0[w];i;i=e[i].nx)if(e[i].v){
int u=e[i].to;
if(!h[u])h[q[++qr]=u]=h[w]+1;
}
}
return 0;
}
int dfs(int w,int f){
if(w==T)return f;
int c,used=0;
for(int i=e0[w];i;i=e[i].nx)if(e[i].v){
int u=e[i].to;
if(h[u]!=h[w]+1)continue;
c=dfs(u,min(e[i].v,f-used));
e[i].v-=c,e[i^1].v+=c,used+=c;
if(f==used)return f;
}
h[w]=0;
return used;
}
void cal(int s){
ep=2;
S=idp+1;T=id[gf(0)];
int c1=0;
for(int i=1;i<=S;++i)e0[i]=0;
for(int i=0;i<p;++i)if(s>>i&1){
++c1;
ae(S,id[gf(i+1)],inf,0);
}
for(int i=1;i<=n;++i){
for(int j=0;j<ns[i].e.size();++j){
::edge&e=ns[i].e[j];
if(e.p.x>0||e.p.x==0&&e.p.y>0)ae(id[gf(e.i1)],id[gf(e.i2)],e.v,e.v);
}
}
int f=0;
while(bfs()){
f+=dfs(S,inf);
if(f>=ans[c1])return;
}
ans[c1]=f;
}
}
int main(){
scanf("%d%d%d",&p,&n,&m);
for(int i=0;i<p;++i)ps[i].R(),ev[evp++]=(event){2,ps[i].x,i};
for(int i=1;i<=n;++i)ns[i].R();
ep=p;
for(int i=0,a,b,c;i<m;++i){
scanf("%d%d%d",&a,&b,&c);
ep+=2;
ns[a].ae(b,c,ep-1,ep);
ns[b].ae(a,c,ep,ep-1);
}
for(int i=1;i<=ep;++i)f[i]=i;
for(int i=1;i<=n;++i)ns[i].init();
std::sort(ev,ev+evp);
for(int i=0,j=0;i<evp;i=j){
for(;j<evp&&ev[i].x==ev[j].x;ev[j++].cal());
while(itp){
il=ir=it=its[--itp];
mg(it->i2,(++ir)!=ln.end()?ir->i1:0);
mg(il!=ln.begin()?(--il)->i2:0,it->i1);
}
}
for(int i=0;i<=ep;++i)if(f[i]==i)id[i]=++idp;
for(int i=1;i<=n;++i){
for(int j=0;j<ns[i].e.size();++j){
edge&e=ns[i].e[j];
}
}
for(int i=0;i<=p;++i)ans[i]=0x7fffffff;
for(int S=1;S<(1<<p);++S)mxf::cal(S);
for(int i=1;i<=p;++i)printf("%d\n",ans[i]);
return 0;
}