#include<iostream>
#include<algorithm>
#include<vector>
#include<complex>
using namespace std;
#define REP(i,b,n) for(int i=b;i<n;i++)
#define rep(i,n)   REP(i,0,n)
#define pb         push_back
typedef complex<double> P;

const double inf = 1e10;
const double eps = 1e-10;

double cross(P a,P b){
  return a.real()*b.imag()-a.imag()*b.real();
}

bool isp(P a,P b,P c){
  return abs(a-c)+abs(b-c) < abs(a-b)+eps;
}

bool is_intersected_ls(P a1,P a2,P b1,P b2){
  if ( isp(a1,a2,b1))return true;
  if ( isp(a1,a2,b2))return true;
  if ( isp(b1,b2,a1))return true;
  if ( isp(b1,b2,a2))return true;
  if (  ( cross(a2-a1,b1-a1) * cross(a2-a1,b2-a1)<-eps ) && //-EPS
	( cross(b2-b1,a1-b1)*cross(b2-b1,a2-b1)<-eps))return true;
  else return false;
}


P intersection_ls(P a1,P a2,P b1,P b2){
  P b = b2-b1;
  double d1=abs(cross(b,a1-b1));//
  double d2=abs(cross(b,a2-b1));
  double t = d1/(d1+d2);//p[^ t:1-t = d1:d2
  return a1+(a2-a1)*t;
}


double iscrash(P a,P b,P op1,P op2,double ver,double t){
  //    cout << "co " <<
  //      a <<" " << b <<" " << op1 <<" " << op2 <<" "
  //         <<is_intersected_ls(a,b,op1,op2)
  //         << endl;
  
  if (!is_intersected_ls(a,b,op1,op2))return -1;
  P cp = intersection_ls(a,b,op1,op2);
  double cmpt = abs(cp-a)/ver;
  //  if (cmpt>-eps && cmpt< t)
    //    cout <<"cross point " <<  cp <<" " << cmpt <<  endl;
  //cout << cmpt <<" " << t << endl;
  if (cmpt > -eps && cmpt < t)return cmpt;
  return -1;
}

double find_min(vector<P> in,vector<int> time,
		vector<P> v){
  
  int t;
  double x;
  P s1,s2;
  P sv;//shot v
  double len;
  cin>>t>>x>>sv.real()>>sv.imag()>>len;
  double ret = 2*inf;
  s1=P(x,0);
  s2=P(x-(len*sv.real()/abs(sv)),-(len*sv.imag()/abs(sv)));
  
  int now = 0;//now time
  P move(0,0);
  bool flag=false;

  rep(i,time.size()){
    if (!flag&&now <= t && t <= time[i]){//[now,t],[t,time[i]]
      P tmpmove=move;
      flag=true;
      time.insert(time.begin()+i,time[i]);
      v.insert(v.begin()+i,v[i]);
      time[i]=t;
    }else if(flag){//t < time[i]
      double tv=abs(v[i]-sv);
      double ttime = time[i]-now;
      rep(j,in.size()){
	double tmp;
	tmp=iscrash(in[j]+move,in[j]+move+(ttime)*(v[i]-sv),
		    s1,s2,
		    tv,ttime);
	if (tmp >-eps)ret=min(tmp+now,ret);
	
	tmp=iscrash(s1,s1+(ttime)*(sv-v[i]),
		    in[j]+move,in[(j+1)%in.size()]+move,
		    tv,ttime);
	if (tmp > -eps)ret=min(tmp+now,ret);

	tmp=iscrash(s2,s2+(ttime)*(sv-v[i]),
		    in[j]+move,in[(j+1)%in.size()]+move,
		    tv,ttime);
	if (tmp > -eps)ret=min(tmp+now,ret);
      }
      s1+=sv*(double)(time[i]-now);
      s2+=sv*(double)(time[i]-now);
    }

    move+=((double)time[i]-now)*v[i];
    //    cout << now <<" " << ret << endl;
    now=time[i];

    //cout <<"move " <<  move << endl;



    if (!(ret>inf))return ret;
  }
  
  return -1;
}

void solve(vector<P> &in,vector<int>&time,
	   vector<P> &v,int b){

  vector<double>ans;
  rep(i,b){ 
    double tmp = find_min(in,time,v);
    if (tmp >-eps)ans.pb(tmp);
  }


  sort(ans.begin(),ans.end());
  cout << ans.size() << endl;
  rep(i,ans.size()){
    printf("%.3lf\n",ans[i]);
  }
}

main(){
  //  test();
  int n,m,b;
  while(cin>>n>>m>>b && n){
    vector<P> in;
    rep(i,n){
      P tmp;
      cin>>tmp.real()>>tmp.imag();
      in.pb(tmp);
    }
    vector<int> time;
    vector<P>   v;
    rep(i,m){
      int a;P b;
      cin>>a>>b.real()>>b.imag();
      time.pb(a);
      v.pb(b);
    }
    time.pb(10000000);
    v.pb(P(0,0));
    solve(in,time,v,b);
  }


  return false;
}

Measured memory_bytes: 1044