// Author : Ritik Patel
// Institution: Pandit Deendayal Petroleum University
#include <bits/stdc++.h>
using namespace std;
#define ub upper_bound // first element > val(itr)
#define lb lower_bound // first element >= val(itr)
#define sz(a) int((a).size())
#define all(c) (c).begin(),(c).end()
#define rall(a) (a).rbegin(), (a).rend()
#define tr(c,i) for(typeof((c)).begin() i = (c).begin(); i != (c).end(); i++)
#define present(c,x) ((c).find(x) != (c).end())
#define cpresent(c,x) (find(all(c),x) != (c).end())
#define what_is(x) cout << #x << " is: " << x << endl;
#define UNIQUE(v) do { sort((v).begin(), (v).end()); (v).erase(unique((v).begin(), (v).end()), (v).end()); } while (false)
#define bitcount(a) __builtin_popcount(a) // count set bits
#define lzcount(x) __builtin_clz(x) // count leading zeros in binary representation of number
#define tzcount(x) __builtin_ctz(x) // count trailing zeros in binary representation of number
#define FAST ios_base::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);
typedef long long ll;
typedef long double lld;
const ll MOD = 1e9+7;
const lld PI = acos(-1.0);
template<typename T> T gcd(T a,T b){ if(b>a) return gcd(b,a);return b==0?a:gcd(b,a%b); }
template<typename T> T lcm(T a, T b) { return a * b / gcd(a, b); }
template<typename T> T fast_power(T x,T y,ll m=MOD){T ans=1;while(y>0){if(y&1LL) ans=(ans*x)%m;y>>=1LL;x=(x*x)%m;}return ans%m;}
template<typename X> inline X abs(const X& a) { return a < 0? -a: a; }
template<typename X> inline X sqr(const X& a) { return a * a; }
template<typename T> inline string toStr(T x) { stringstream st; st << x; string s; st >> s; return s; }
//inline ll mod(ll x,ll n) {if (x < n) return x; if (x >= n) return x - n;}
//ll findMMI_fermat(ll n,ll M) {ll ans= fast_power(n,M-2,M);return ans;}//i.e In (a/b)%M..it calculates MMI of b wrt M,only if M is prime
//ll add(ll a,ll b,ll M) { return mod(( mod(a,M ) + mod(b,M )),M); }
//ll sub(ll a, ll b,ll M) { return mod((mod(a,M ) + M - mod(b,M )),M); }
//ll mult(ll a,ll b,ll M) { return mod(( mod(a,M)*mod(b,M) ),M) ; }
//bool isprime(ll a){ if(a==2) {return 1;}if(!(a&1) ) {return 0;}for(ll i=3;i*i<=a;i+=2){if(a%i==0) {return 0;} } return 1;}
ll exgcd(ll a, ll b, ll &x, ll &y){ int g = a; x = 1, y = 0; if (b) g = exgcd(b, a % b, y, x), y -= a / b * x; return g; }
ll inv(ll a, ll m) { ll x, y; exgcd(a, m, x, y); return (x + m) % m; }
int dx[] = {1, -1, 0, 0};
int dy[] = {0, 0, 1, -1};
typedef vector<int> vi;
typedef vector<ll> vl;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
/* -------------------------------Main Code------------------------------- */
ll ans;
ll n,h;
vi happy(25),happy1(25);
void dfs(ll frs, ll sec, ll id){
if(id==n+1){
if(frs>=h && sec>=h) ans++;
return;
}
dfs(frs+happy[id],sec,id+1);
dfs(frs,sec+happy1[id],id+1);
dfs(frs+happy[id],sec+happy1[id],id+1);
}
int main(){
FAST
int T;cin>>T;
for(int t=1;t<=T;t++){
cin>>n>>h;
for(int i=1;i<=n;i++) cin>>happy[i];
for(int i=1;i<=n;i++) cin>>happy1[i];
ans = 0LL;
dfs(0LL,0LL,1LL);
cout<<"Case #"<<t<<": "<<ans<<endl;
}
return 0;
}
Ly8gQXV0aG9yIDogUml0aWsgUGF0ZWwKLy8gSW5zdGl0dXRpb246IFBhbmRpdCBEZWVuZGF5YWwgUGV0cm9sZXVtIFVuaXZlcnNpdHkKCiNpbmNsdWRlIDxiaXRzL3N0ZGMrKy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSB1YiAgICAgICAgdXBwZXJfYm91bmQgICAgICAgICAgICAvLyBmaXJzdCBlbGVtZW50ID4gIHZhbChpdHIpCiNkZWZpbmUgbGIgICAgICAgIGxvd2VyX2JvdW5kICAgICAgICAgICAgLy8gZmlyc3QgZWxlbWVudCA+PSB2YWwoaXRyKQoKI2RlZmluZSBzeihhKSBpbnQoKGEpLnNpemUoKSkKI2RlZmluZSBhbGwoYykgKGMpLmJlZ2luKCksKGMpLmVuZCgpCiNkZWZpbmUgcmFsbChhKSAoYSkucmJlZ2luKCksIChhKS5yZW5kKCkKI2RlZmluZSB0cihjLGkpIGZvcih0eXBlb2YoKGMpKS5iZWdpbigpIGkgPSAoYykuYmVnaW4oKTsgaSAhPSAoYykuZW5kKCk7IGkrKykKI2RlZmluZSBwcmVzZW50KGMseCkgKChjKS5maW5kKHgpICE9IChjKS5lbmQoKSkgCiNkZWZpbmUgY3ByZXNlbnQoYyx4KSAoZmluZChhbGwoYykseCkgIT0gKGMpLmVuZCgpKSAKI2RlZmluZSB3aGF0X2lzKHgpIGNvdXQgPDwgI3ggPDwgIiBpczogIiA8PCB4IDw8IGVuZGw7CiNkZWZpbmUgVU5JUVVFKHYpIGRvIHsgc29ydCgodikuYmVnaW4oKSwgKHYpLmVuZCgpKTsgKHYpLmVyYXNlKHVuaXF1ZSgodikuYmVnaW4oKSwgKHYpLmVuZCgpKSwgKHYpLmVuZCgpKTsgfSB3aGlsZSAoZmFsc2UpCgojZGVmaW5lIGJpdGNvdW50KGEpIF9fYnVpbHRpbl9wb3Bjb3VudChhKSAgIC8vIGNvdW50IHNldCBiaXRzCiNkZWZpbmUgbHpjb3VudCh4KSBfX2J1aWx0aW5fY2x6KHgpICAgICAgICAvLyBjb3VudCBsZWFkaW5nIHplcm9zIGluIGJpbmFyeSByZXByZXNlbnRhdGlvbiBvZiBudW1iZXIKI2RlZmluZSB0emNvdW50KHgpIF9fYnVpbHRpbl9jdHooeCkgICAgICAgIC8vIGNvdW50IHRyYWlsaW5nIHplcm9zIGluIGJpbmFyeSByZXByZXNlbnRhdGlvbiBvZiBudW1iZXIKCiNkZWZpbmUgRkFTVCBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTtjaW4udGllKG51bGxwdHIpO2NvdXQudGllKG51bGxwdHIpOwoKdHlwZWRlZiBsb25nIGxvbmcgbGw7CnR5cGVkZWYgbG9uZyBkb3VibGUgbGxkOwpjb25zdCBsbCBNT0QgPSAxZTkrNzsKY29uc3QgbGxkIFBJID0gYWNvcygtMS4wKTsKCnRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgZ2NkKFQgYSxUIGIpeyBpZihiPmEpIHJldHVybiBnY2QoYixhKTtyZXR1cm4gYj09MD9hOmdjZChiLGElYik7IH0KdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBsY20oVCBhLCBUIGIpIHsgcmV0dXJuIGEgKiBiIC8gZ2NkKGEsIGIpOyB9CnRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgZmFzdF9wb3dlcihUIHgsVCB5LGxsIG09TU9EKXtUIGFucz0xO3doaWxlKHk+MCl7aWYoeSYxTEwpIGFucz0oYW5zKngpJW07eT4+PTFMTDt4PSh4KngpJW07fXJldHVybiBhbnMlbTt9CnRlbXBsYXRlPHR5cGVuYW1lIFg+IGlubGluZSBYIGFicyhjb25zdCBYJiBhKSB7IHJldHVybiBhIDwgMD8gLWE6IGE7IH0KdGVtcGxhdGU8dHlwZW5hbWUgWD4gaW5saW5lIFggc3FyKGNvbnN0IFgmIGEpIHsgcmV0dXJuIGEgKiBhOyB9CnRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBzdHJpbmcgdG9TdHIoVCB4KSB7IHN0cmluZ3N0cmVhbSBzdDsgc3QgPDwgeDsgc3RyaW5nIHM7IHN0ID4+IHM7IHJldHVybiBzOyB9CgovL2lubGluZSBsbCBtb2QobGwgeCxsbCBuKSB7aWYgKHggPCBuKSByZXR1cm4geDsgaWYgKHggPj0gbikgcmV0dXJuIHggLSBuO30KLy9sbCBmaW5kTU1JX2Zlcm1hdChsbCBuLGxsIE0pIHtsbCBhbnM9IGZhc3RfcG93ZXIobixNLTIsTSk7cmV0dXJuIGFuczt9Ly9pLmUgSW4gKGEvYiklTS4uaXQgY2FsY3VsYXRlcyBNTUkgb2YgYiB3cnQgTSxvbmx5IGlmIE0gaXMgcHJpbWUKLy9sbCBhZGQobGwgYSxsbCBiLGxsIE0pICB7IHJldHVybiBtb2QoKCBtb2QoYSxNICkgKyBtb2QoYixNICkpLE0pOyAgICAgfQovL2xsIHN1YihsbCBhLCBsbCBiLGxsIE0pIHsgcmV0dXJuIG1vZCgobW9kKGEsTSApICsgTSAtIG1vZChiLE0gKSksTSk7ICAgfQovL2xsIG11bHQobGwgYSxsbCBiLGxsIE0pIHsgcmV0dXJuICBtb2QoKCBtb2QoYSxNKSptb2QoYixNKSApLE0pIDsgfQovL2Jvb2wgaXNwcmltZShsbCBhKXsgaWYoYT09Mikge3JldHVybiAxO31pZighKGEmMSkgKSB7cmV0dXJuIDA7fWZvcihsbCBpPTM7aSppPD1hO2krPTIpe2lmKGElaT09MCkge3JldHVybiAwO30gfSByZXR1cm4gMTt9IAoKbGwgZXhnY2QobGwgYSwgbGwgYiwgbGwgJngsIGxsICZ5KXsgIGludCBnID0gYTsgeCA9IDEsIHkgPSAwOyAgaWYgKGIpIGcgPSBleGdjZChiLCBhICUgYiwgeSwgeCksIHkgLT0gYSAvIGIgKiB4OyAgcmV0dXJuIGc7IH0KIApsbCBpbnYobGwgYSwgbGwgbSkgeyBsbCB4LCB5OyAgZXhnY2QoYSwgbSwgeCwgeSk7ICByZXR1cm4gKHggKyBtKSAlIG07IH0KCmludCBkeFtdID0gezEsIC0xLCAwLCAwfTsKaW50IGR5W10gPSB7MCwgMCwgMSwgLTF9OwoKdHlwZWRlZiB2ZWN0b3I8aW50PiB2aTsKdHlwZWRlZiB2ZWN0b3I8bGw+IHZsOwp0eXBlZGVmIHBhaXI8aW50LGludD4gcGlpOwp0eXBlZGVmIHBhaXI8bGwsbGw+IHBsbDsKICAKICAgICAgICAgICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLU1haW4gQ29kZS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KbGwgYW5zOwpsbCBuLGg7CnZpIGhhcHB5KDI1KSxoYXBweTEoMjUpOwoKdm9pZCBkZnMobGwgZnJzLCBsbCBzZWMsIGxsIGlkKXsKICAgIGlmKGlkPT1uKzEpewogICAgICAgIGlmKGZycz49aCAmJiBzZWM+PWgpIGFucysrOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIGRmcyhmcnMraGFwcHlbaWRdLHNlYyxpZCsxKTsKICAgIGRmcyhmcnMsc2VjK2hhcHB5MVtpZF0saWQrMSk7CiAgICBkZnMoZnJzK2hhcHB5W2lkXSxzZWMraGFwcHkxW2lkXSxpZCsxKTsKfQoKCmludCBtYWluKCl7CiAgICBGQVNUCiAgICBpbnQgVDtjaW4+PlQ7CiAgICBmb3IoaW50IHQ9MTt0PD1UO3QrKyl7CiAgICAgICAgY2luPj5uPj5oOwogICAgICAgIGZvcihpbnQgaT0xO2k8PW47aSsrKSBjaW4+PmhhcHB5W2ldOwogICAgICAgIGZvcihpbnQgaT0xO2k8PW47aSsrKSBjaW4+PmhhcHB5MVtpXTsKICAgICAgICBhbnMgPSAwTEw7CiAgICAgICAgZGZzKDBMTCwwTEwsMUxMKTsKICAgICAgICBjb3V0PDwiQ2FzZSAjIjw8dDw8IjogIjw8YW5zPDxlbmRsOwogICAgfQoJcmV0dXJuIDA7Cn0=