#include "iostream"
#include "algorithm"
#include "cstring"
#define LOCAL
using namespace std;
int m[101];
int p[101];
int dp[101];
int main(){
#ifdef LOCAL
freopen("data.txt","r",stdin);
#endif
int T;
int n;
int k;
scanf("%d",&T);
while(T--){
while(scanf("%d%d",&n,&k)!=EOF){
memset(m,0,sizeof(m));
memset(p,0,sizeof(p));
memset(dp,0,sizeof(dp));
for(int i = 0; i < n; i++){
scanf("%d",&m[i]);
}
for(int i = 0; i < n; i++){
scanf("%d",&p[i]);
dp[i] = p[i];
}
for(int i = 0; i < n; i++){
for(int j = 0; j < i; j++){
if(m[i] - m[j] > k){
}
}
}
sort(dp,dp+n);
printf("%d\n",dp[n-1]);
}
}
}
重点是动态转移方程的写出,是需要根据前面的所有现态~得出dp[i] = max(dp[i], dp[j] + p[i])