#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define rep(i,a,n) for (int i=a;i=a;i--) #define pb push_back #define mp make_pair #define all(x) (x).begin(),(x).end() #define fi first #define se second #define SZ(x) ((int)(x).size()) #define ACCU accumulate #define TWO(x) (1<<(x)) #define TWOL(x) (1ll<<(x)) #define clr(a) memset(a,0,sizeof(a)) #define POSIN(x,y) (0<=(x)&&(x) VI; typedef vector VS; typedef vector VD; typedef long long ll; typedef long double LD; typedef pair PII; typedef pair PLL; typedef vector VL; typedef vector VPII; typedef complex CD; const int inf=0x20202020; const ll mod=1000000007; const double eps=1e-9; const double pi=3.1415926535897932384626; const int DX[]={1,0,-1,0},DY[]={0,1,0,-1}; ll powmod(ll a,ll b) {ll res=1;a%=mod;for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;} ll powmod(ll a,ll b,ll mod) {ll res=1;a%=mod;for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;} ll gcd(ll a,ll b) { return b?gcd(b,a%b):a;} // head inline int getint() { int ret=0;bool ok=0,neg=0; for(;;) { int c=getchar(); if(c>='0'&&c<='9')ret=(ret<<3)+ret+ret+c-'0',ok=1; else if(ok)return neg?-ret:ret; else if(c=='-')neg=1; } } const int N=101000; int n,m,k,x,v,l[N],r[N],id[N]; pair,int> p[N]; LD c[N],ans; vector vec; LD query(int x) { LD s=0; for (;x;x-=x&-x) s+=c[x]; return s;} void modify(int x,LD s) { for (;x<=n;x+=x&-x) c[x]+=s;} int main() { for (int T=getint();T;T--) { n=getint(); m=getint(); k=getint(); rep(i,0,n) { x=getint(); v=getint(); p[i]=mp(mp(x,v),i); } sort(p,p+n); rep(i,0,n) id[p[i].se]=i; rep(i,1,n+1) c[i]=0; rep(i,1,n+1) modify(i,p[i-1].fi.se); rep(i,0,n) { vec.clear(); rep(j,max(0,i-k),min(i+k+1,n)) if (j!=i) { vec.pb(mp(abs(p[j].fi.fi-p[i].fi.fi),p[j].se)); } sort(all(vec)); l[i]=r[i]=i; rep(j,0,k) l[i]=min(l[i],id[vec[j].se]),r[i]=max(r[i],id[vec[j].se]); } ans=0; rep(i,0,m) { x=id[getint()-1]; LD e=(query(r[x]+1)-query(l[x])-p[x].fi.se)/k; ans+=e; modify(x+1,e-p[x].fi.se); p[x].fi.se=e; } printf("%.6f\n",(double)ans); } }