#include <bits/stdc++.h>
#define f(i,a,b) for (int i =a;i<b;i++)
#define fr(i,a,b) for (int i =a;i<=b;i++)
using ll = long long;
using namespace std;
const int maxn = 1e5;
int main()
{
// #ifndef oj
// freopen("MM.inp","r",stdin);
// freopen("MM.out","w",stdout);
// #endif
// ios::sync_with_stdio(false);
// cin.tie(nullptr);
int n,l,d; cin >> n >> l >> d;
int a[maxn], b[maxn];
f(i,0,n) cin >>a[i]; f(i,0,n) cin >>b[i];
vector<pair<int,int>> trees;
f(i,0,n) trees.push_back(make_pair(a[i],b[i]));
sort(trees.begin(),trees.end());
sort(a,a+n);
l-=2*d;
vector<int> v;
f(i,0,n) {
int tl = d*2;int res= trees[i].second;
f (j, i+1, n) {
if (tl+(a[j]-a[j-1])*d*2<=l) {tl += (a[j]-a[j-1])*d*2;res+=trees[j].second;}
if (tl+(a[j]-a[j-1])*d*2>l) {
break;
}
}
v.push_back(res);
}
cout << *max_element(v.begin(),v.end());
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgZihpLGEsYikgZm9yIChpbnQgaSA9YTtpPGI7aSsrKQojZGVmaW5lIGZyKGksYSxiKSBmb3IgKGludCBpID1hO2k8PWI7aSsrKQoKdXNpbmcgbGwgPSBsb25nIGxvbmc7CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgbWF4biA9IDFlNTsKCmludCBtYWluKCkKewoJLy8gI2lmbmRlZiBvagoJLy8gZnJlb3BlbigiTU0uaW5wIiwiciIsc3RkaW4pOwoJLy8gZnJlb3BlbigiTU0ub3V0IiwidyIsc3Rkb3V0KTsKCS8vICNlbmRpZgoJLy8gaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwoJLy8gY2luLnRpZShudWxscHRyKTsKCglpbnQgbixsLGQ7IGNpbiA+PiBuID4+IGwgPj4gZDsKCWludCBhW21heG5dLCBiW21heG5dOwoJZihpLDAsbikgY2luID4+YVtpXTsgZihpLDAsbikgY2luID4+YltpXTsKCXZlY3RvcjxwYWlyPGludCxpbnQ+PiB0cmVlczsKCWYoaSwwLG4pIHRyZWVzLnB1c2hfYmFjayhtYWtlX3BhaXIoYVtpXSxiW2ldKSk7Cglzb3J0KHRyZWVzLmJlZ2luKCksdHJlZXMuZW5kKCkpOwoJc29ydChhLGErbik7CglsLT0yKmQ7Cgl2ZWN0b3I8aW50PiB2OwoJZihpLDAsbikgewoJCWludCB0bCA9IGQqMjtpbnQgcmVzPSB0cmVlc1tpXS5zZWNvbmQ7CgkJZiAoaiwgaSsxLCBuKSB7CgkJCWlmICh0bCsoYVtqXS1hW2otMV0pKmQqMjw9bCkge3RsICs9IChhW2pdLWFbai0xXSkqZCoyO3Jlcys9dHJlZXNbal0uc2Vjb25kO30KCQkJaWYgKHRsKyhhW2pdLWFbai0xXSkqZCoyPmwpIHsKCQkJCWJyZWFrOwoJCQl9CgkJfQoJCXYucHVzaF9iYWNrKHJlcyk7Cgl9Cgljb3V0IDw8ICptYXhfZWxlbWVudCh2LmJlZ2luKCksdi5lbmQoKSk7Cgp9Cg==