#include #include #include #include //#define PI M_PI using namespace std; using ll=long long; #pragma GCC target ("avx") #pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") //#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native") #define rep(i,a,b) for(it i=(it)(a);i<=(it)b;i++) #define irep(i,a,b) for(int i=(int)(a);i<=(int)b;i++) #define nrep(i,a,b) for(it i=(it)(a);i>=(it)b;i--) #define inrep(i,a,b) for(int i=(int)(a);i>=(int)b;i--) #define all(v) v.begin(), v.end() #define rall(v) v.rbegin(), v.rend() #define moda 998244353LL #define modb 1000000007LL #define modc 968244353LL #define dai 2500000000000000000LL #define sho -dai #define aoi 1e+18 #define tyu 2500000000 #define giri 1000000000 #define en 3.14159265358979 #define eps 1e-14 #define yn(x) out(x?"Yes":"No") #define YN(x) out(x?"YES":"NO") #define fi(x) cout< using pq = priority_queue; template using pqg = priority_queue, greater>; template using pairs = pair; using it=long long; using itn=int; using un=unsigned long long; using idb=double; using db=long double; using st=string; using ch=char; using bo=bool; using P=pair; using ip=pair; using vi=vector; using ivi=vector; using ivd=vector; using vd=vector; using vs=vector; using vc=vector; using vb=vector; using vp=vector

; using ivp=vector; using sp=set

; using isp=set; using ss=set; using sca=set; using si=set; using isi=set; using svi=set; using vvi=vector; using ivvi=vector; using ivvd=vector; using vvd=vector; using vvs=vector; using vvb=vector; using vvc=vector; using vvp=vector; using ivvp=vector; using vsi=vector; using ivsi=vector; using vsp=vector; using ivsp=vector; using vvsi=vector; using ivvsi=vector; using vvsp=vector; using ivvsp=vector; using vvvi=vector; using ivvvi=vector; using ivvvd=vector; using vvvd=vector; using vvvb=vector; using ivvvp=vector; using vvvvi=vector; using ivvvvi=vector; using vvvvd=vector; const int dx[8]={0,1,0,-1,1,1,-1,-1}; const int dy[8]={1,0,-1,0,1,-1,1,-1}; st abc="abcdefghijklmnopqrstuvwxyz"; st ABC="ABCDEFGHIJKLMNOPQRSTUVWXYZ"; st num="0123456789"; st mb="xo"; st MB="XO"; #include using namespace atcoder; using mints=modint998244353; using mint=modint; using minto=modint1000000007; using vm=vector; using vms=vector; using vmo=vector; using vvm=vector; using vvms=vector; using vvmo=vector; using vvvm=vector; using vvvms=vector; using vvvmo=vector; using vvvvm=vector; using vvvvms=vector; using vvvvmo=vector; using vvvvvm=vector; using vvvvvms=vector; using vvvvvmo=vector; using vvvvvvm=vector; using vvvvvvms=vector; using vvvvvvmo=vector; namespace { template ostream &operator<<(ostream &os, const pair &p) { os << p.first << ' ' << p.second; return os; } template istream &operator>>(istream &is, pair &p) { is >> p.first >> p.second; return is; } template ostream &operator<<(ostream &os, const vector &v) { int s = (int)v.size(); for (int i = 0; i < s; i++) os << (i ? " " : "") << v[i]; return os; } template istream &operator>>(istream &is, vector &v) { for (auto &x : v) is >> x; return is; } istream &operator>>(istream &is, __int128_t &x) { string S; is >> S; x = 0; int flag = 0; for (auto &c : S) { if (c == '-') { flag = true; continue; } x *= 10; x += c - '0'; } if (flag) x = -x; return is; } istream &operator>>(istream &is, __uint128_t &x) { string S; is >> S; x = 0; for (auto &c : S) { x *= 10; x += c - '0'; } return is; } ostream &operator<<(ostream &os, __int128_t x) { if (x == 0) return os << 0; if (x < 0) os << '-', x = -x; string S; while (x) S.push_back('0' + x % 10), x /= 10; reverse(begin(S), end(S)); return os << S; } ostream &operator<<(ostream &os, __uint128_t x) { if (x == 0) return os << 0; string S; while (x) S.push_back('0' + x % 10), x /= 10; reverse(begin(S), end(S)); return os << S; } void in() {} template void in(T &t, U &...u) { cin >> t; in(u...); } void out() { cout << '\n'; } template void out(const T &t, const U &...u) { cout << t; if (sizeof...(u)) cout << sep; out(u...); } struct IoSetupNya { IoSetupNya() { cin.tie(nullptr); ios::sync_with_stdio(false); cout << fixed << setprecision(15); cerr << fixed << setprecision(7); } } iosetupnya; } //namespace Nyaan template void dec(vector &a){ rep(i,0,a.size()-1)a[i]--; return; } it gcda(it a,it b){ if(!a||!b){ return max(a,b); } while(a%b&&b%a){ if(a>b)a%=b; else b%=a; } return min(a,b); } it lcma(it a,it b){ return a/gcda(a,b)*b; } bo outc(int h,int w,int x,int y){ return (x<0||x>=h||y<0||y>=w); } /*総和をもとめるセグ木 struct nod{ it val; int siz; nod(it v=0,int s=0):val(v),siz(s){} }; nod op(nod a,nod b){return nod(a.val+b.val,a.siz+b.siz);} nod e(){return nod(0,0);} struct act{ it a; act(it e=0):a(e){} }; nod mapping(act f,nod x){return nod(f.a+x.val,x.siz);} act comp(act f,act g){return act(f.a+g.a);} act id(){return act(0);}*/ #define endl '\n' int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int n,d,k;in(n,d,k); vi a(n);in(a); ivi c(n);in(c); irep(i,0,n-1)c[i]=min(c[i],k); vvi dp(d+1,vi(k+1,sho)); dp[0][0]=0; irep(i,0,n-1) inrep(j,d-1,0) inrep(l,k,0){ if(dp[j][l]==sho)continue; dp[j+1][min(l+c[i],k)]=max(dp[j+1][min(l+c[i],k)],dp[j][l]+a[i]); } out(dp[d][k]==sho?"No":to_string(dp[d][k])); }