#include <bits/stdc++.h>
#define ld long double
#define sf scanf
#define pf printf
#define pb push_back
#define mp make_pair
#define PI ( acos(-1.0) )
#define pmod 1000000007
#define maxn 100005
#define IN freopen("input.txt","r",stdin)
#define OUT freopen("output.txt","w",stdout)
#define FOR(i,a,b) for(int i=a ; i<=b ; i++)
#define INF 1000000000
#define ll long long int
#define eps (1e-8)
#define sq(x) ( (x)*(x) )

using namespace std;

typedef pair < int, int > pii;
typedef pair < ll, ll > pll;

struct bb{
    int x,y,z;
    double r;
};
struct dt{
    int a,b,c;
};
long double dist(bb a, bb b){
    return sq(a.x-b.x)+sq(a.y-b.y)+sq(a.z-b.z);
}

bool check(bb a,bb b, bb s){
    if (dist(a,s)<sq(s.r)){
        if (dist(b,s)<sq(s.r)) return 0;
        else{
            return 1;
        }
    }
    else{
        if (dist(b,s)<sq(s.r)) return 1;
        else{
            ld m=sqrt(dist(a,b));
            ld n=sqrt(dist(a,s));
            ld p=sqrt(dist(b,s));
            ld S=sqrt((m+n+p)*(m+n-p)*(n+p-m)*(m+p-n)/16);
            ld h=2*S/m;
            if (h>s.r) return 0;
            else{
                ld u=(sq(m)+sq(p)-sq(n));
                ld v=(sq(m)+sq(n)-sq(p))
                ;
                if(v<=0 || u<=0) return 0;
                else return 1;

            }
        }
    }
}
int c[20];
void it(int c[20],ll n){
        FOR (i,0,19) c[i]=0;
        ll ii=1;
        while (n) {
            c[ii]=n%2;n/=2;ii++;
        }
    }
ll mu[20];

int dd[2005];
//ld res=0;
bb s[2005];
bb t[20];
bb e;
vector <int> v[20];
long double f[20];
int l=0;
void th(int n, int m,int k){
  ld  res=0;
         ld q; int u;
        FOR (p,0,mu[m]-1){q=0;u=0;
        //memset(dd,0,sizeof(dd));
        FOR (j,1,2001) {dd[j]=0;}
            it (c,p);
            FOR (j,1,m){
                if (c[j]==1){
                    //s[i]=(s[i]+a[j])%m;
                   if (!v[j].empty()){ FOR (k,0,v[j].size()-1){
                        //if (i==22 && dd[v[j][k]]==0) cout<<v[j][k]<<" ";
                        if (dd[v[j][k]]==0){u++;dd[v[j][k]]++;}
                        }
                    }
                    q+=f[j];
                }
            }
            //cout<<u<<1<<endl;
            //FOR(z,1,n) if (dd[z]==1) {u++;}
            //if (l==2) cout<<p<<" "<<u<<endl;
            if (u<=k) res=max(res,q);
        }
        cout<<fixed<<setprecision(5)<<res<<endl;
    }
int main()
{
cin.tie(NULL);
   mu[0]=1;
    FOR (i,1,20){
        mu[i]=mu[i-1]*2;
    }

while(1){ l++;int n,m,k;
cin>>n>>m>>k;
if (n==0) return 0;
//if (l>=3) return 0;
else { //memset(f,0,sizeof(f));
       // memset(s,0,sizeof(s));
       // memset(t,0,sizeof(t));
        FOR (i,0,19) v[i].clear();
    FOR (i,1,n){
        cin>>s[i].x>>s[i].y>>s[i].z>>s[i].r;
    }
    FOR (i,1,m){
        cin>>t[i].x>>t[i].y>>t[i].z>>t[i].r;

    }
    cin>>e.x>>e.y>>e.z;
    FOR (i,1,m){
        f[i]=(t[i].r)/dist(e,t[i]);
     //   cout<<f[i]<<endl;
    }
    FOR (i,1,n){
        FOR (j,1,m){
            if (check(e,t[j],s[i])==1) {v[j].pb(i);}
         }
    }
th(n,m,k);
//cout<<res<<endl;
}
}
         return 0;
}