#include<cstdio>
#include<cmath>
#include<vector>
using namespace std;
const double eps = 1e-9;
struct point
{
    double x,y,z;
    //荳榊帥蜿?丙逧?サコ讒句ュ占キ溷帥蜿?丙逧?サコ讒句ュ寝Q
    point():x(0),y(0),z(0){}
    point(double _x,double _y,double _z):x(_x),y(_y),z(_z){}

    point operator+(const point &p) const{ return point(x+p.x, y+p.y, z+p.z);}
    point operator-(const point &p) const{ return point(x-p.x, y-p.y, z-p.z);}
    point operator*(const double &d) const{ return point(x*d, y*d, z*d);}
    point operator/(const double &d) const{ return point(x/d, y/d, z/d);}
};
struct sphere
{
    point p;
    double r;
    sphere(point _p,double _r):p(_p),r(_r){}
};
struct line
{
    point a,b;
    line(point _a,point _b):a(_a),b(_b){}
};

int n,m,r;
point obj;//objective point ;
vector <sphere> bal;
vector <point> light;
double bright[16];  //brightness
vector <int> rmv[16]; //rmv these balloons to get the light

point start(0.0,0.0,0.0);
double length2(point a,point b)
{
    double ans=(a.x-b.x)*(a.x-b.x);
    ans+=(a.y-b.y)*(a.y-b.y);
    ans+=(a.z-b.z)*(a.z-b.z);
    return ans;
}
/*
inline double norm(const point &a){ return a.x*a.x+a.y*a.y+a.z*a.z;}
inline double abs(const point &a){ return sqrt(norm(a));}
inline double dot(const point &a, const point &b){ return a.x*b.x+a.y*b.y+a.z*b.z;}
point proj(const line &l, const point &p){
    double t = dot(p-l.a, l.a-l.b) / norm(l.a-l.b);
    return l.a+(l.a-l.b)*t;
}
bool corss(const line &l, const sphere &s){
    point a = l.a-s.p, b = l.b-s.p, c = proj(l,s.p)-s.p;
    if(abs(a) < s.r-eps and abs(b) < s.r-eps and abs(c) < s.r-eps)
	{
		return 0; // contain
	}
    if(abs(c) > s.r+eps) return 0; // far
    if(abs(a) < s.r-eps or abs(b) < s.r-eps) return 1; // intersect
    if(abs(a-c)+abs(b-c)<abs(a-b)+eps) return 1; // intersect
    return 0;
}
*/
//12312312313
double abs(point a)
{
	return sqrt(length2(a,start));
}

bool corss(line ln,sphere sph)
{
	point a=ln.a;
	point b=ln.b;
	bool flag1=0,flag2=0;
	if(sqrt(length2(a,sph.p))<sph.r-eps) flag1=1;
	if(sqrt(length2(b,sph.p))<sph.r-eps) flag2=1;
	if(flag1&&flag2)
	{
		return 0;
		//printf("A");
	}
	else if(flag1||flag2) return 1;
	//now to consider two point are outside of the sphere
	// ( ap X ab ) / length(ab)   = lenth(line,sphere)
	point ap(sph.p.x-a.x,sph.p.y-a.y,sph.p.z-a.z);
	point ab(b.x-a.x,b.y-a.y,b.z-a.z);
	point ba(a.x-b.x,a.y-b.y,a.z-b.z);
	point tmp(ap.y*ab.z-ap.z*ab.y,ap.z*ab.x-ap.x*ab.z,ap.x*ab.y-ap.y*ab.x);
	
	double len1=sqrt(tmp.x*tmp.x+tmp.y*tmp.y+tmp.z*tmp.z);
	double len2=sqrt(length2(a,b));
	if((len1/len2)>(sph.r-eps)) return 0;
	else
	{
		point bp(sph.p.x-b.x,sph.p.y-b.y,sph.p.z-b.z);
		// ap??bp <0   return 1;
		//there're still some details to consider
		//printf("%lf\n",(ap.x*bp.x)+(ap.y*bp.y)+(ap.z*bp.z));
		if((ap.x*bp.x)+(ap.y*bp.y)+(ap.z*bp.z)<0.0) return 1;
		if((ab.x*ap.x)+(ab.y*ap.y)+(ab.z*ap.z)<0.0) return 0;
		if((ba.x*bp.x)+(ba.y*bp.y)+(ba.z*bp.z)<0.0) return 0;
		return 1; 
	}
}
//1231321313223
void solve()
{
    int i,j,k;
    for(i=0;i<m;i++) rmv[i].clear();
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
        {
            if(corss(line(light[i],obj),bal[j]))
			{
				rmv[i].push_back(j);
			}
        }
    }
    double ans=0.0;
    for(k=0;k<(1<<m);k++)
    {
       bool rmvv[2048]={};  //balloons<2000
       int cnt=0;
       double sum=0.0;
       for(i=0;i<m;i++)
       {
           if((k>>i)&1)
           {
               for(j=0;j<rmv[i].size();j++)
               {
                   if(!rmvv[rmv[i][j]]) //rmb[i][j] is the index of the balloon
                   {//if this balloon is not removed yet
                       rmvv[rmv[i][j]]=1;
                       cnt++;
                   }
               }
               sum+=bright[i]/length2(light[i],obj);
           }
       }
		
       if(cnt<=r) ans=max(ans,sum);
    }
    printf("%lf\n",ans);
}

bool input()
{
    scanf("%d %d %d",&n,&m,&r);
    if(n+m+r==0) return 0;

    int x,y,z,r;
    bal.clear();
    light.clear();
    for(int i=0;i<n;i++)
    {//eat the ballons
        scanf("%d %d %d %d",&x,&y,&z,&r);
        bal.push_back(sphere(point(x,y,z),r));
    }
    for(int i=0;i<m;i++)
    {//eat the light sources
        scanf("%d %d %d %d",&x,&y,&z,&r);
        light.push_back(point(x,y,z));
        bright[i]=r;
    }
    //eat the objective point
    scanf("%d %d %d",&x,&y,&z);
    obj=point(x,y,z);

    return 1;
}

int main()
{
    while(input()) solve();
    return 0;
}

Measured memory_bytes: 1212