#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<b;i++)
#define rrep(i,b,a) for(int i=b;i>=a;i--)
#define fori(a) for(auto i : a )
#define all(a) begin(a), end(a)
#define set(a,b) memset(a,b,sizeof(a))
#define pi 3.14159
#define ll long long
#define ull unsigned long long
#define pb push_back
#define PF push_front //deque
// #define mp make_pair
#define pq priority_queue
#define mod 1000000007
#define f first
#define s second
#define pii pair< int, int >
#define tc int t; cin >> t; while(t--)
using namespace std;
string repeat(string s, int n) {
string s1 = s;
for (int i=1; i<n;i++)
s += s1;
return s;
}
string getString(char x) {
string s(1, x);
return s;
}
void optimizeIO(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
}
void recursion(ll n,ll h,ll idx,ll a[],ll b[],ll &ans,ll x,ll y,ll s1[],ll s2[]){
if(x>=h && y>=h){
ans+=pow(3,n-idx);
return;
}
if(idx==n) return;
if(x+s1[idx]<h || y+s2[idx]<h) return ;
recursion(n,h,idx+1,a,b,ans,x+a[idx],y,s1,s2);
recursion(n,h,idx+1,a,b,ans,x,y+b[idx],s1,s2);
recursion(n,h,idx+1,a,b,ans,x+a[idx],y+b[idx],s1,s2);
}
int main(){
optimizeIO();
int lu=1;
tc{
ll ans=0;
ll n,h;
cin>>n>>h;
ll a[n],b[n];
rep(i,0,n) cin>>a[i];
rep(i,0,n) cin>>b[i];
ll s1[n],s2[n];
s1[n-1]=a[n-1];
s2[n-1]=b[n-1];
rrep(i,n-2,0){
s1[i]=a[i]+s1[i+1];
s2[i]=b[i]+s2[i+1];
}
recursion(n,h,0,a,b,ans,0,0,s1,s2);
cout<<"Case #"<<lu++<<": "<<ans<<endl;
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2RlZmluZSByZXAoaSxhLGIpIGZvcihpbnQgaT1hO2k8YjtpKyspCiNkZWZpbmUgcnJlcChpLGIsYSkgZm9yKGludCBpPWI7aT49YTtpLS0pCiNkZWZpbmUgZm9yaShhKSBmb3IoYXV0byBpIDogYSApCiNkZWZpbmUgYWxsKGEpIGJlZ2luKGEpLCBlbmQoYSkKI2RlZmluZSBzZXQoYSxiKSBtZW1zZXQoYSxiLHNpemVvZihhKSkKI2RlZmluZSBwaSAzLjE0MTU5CiNkZWZpbmUgbGwgbG9uZyBsb25nIAojZGVmaW5lIHVsbCB1bnNpZ25lZCBsb25nIGxvbmcKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBQRiBwdXNoX2Zyb250IC8vZGVxdWUKLy8gI2RlZmluZSBtcCBtYWtlX3BhaXIKI2RlZmluZSBwcSBwcmlvcml0eV9xdWV1ZQojZGVmaW5lIG1vZCAxMDAwMDAwMDA3CiNkZWZpbmUgZiBmaXJzdAojZGVmaW5lIHMgc2Vjb25kCiNkZWZpbmUgcGlpIHBhaXI8IGludCwgaW50ID4KI2RlZmluZSB0YyBpbnQgdDsgY2luID4+IHQ7IHdoaWxlKHQtLSkKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnN0cmluZyByZXBlYXQoc3RyaW5nIHMsIGludCBuKSB7CiAgICBzdHJpbmcgczEgPSBzOyAKICAgIGZvciAoaW50IGk9MTsgaTxuO2krKykgCiAgICAgICAgcyArPSBzMTsKICAgIHJldHVybiBzOyAKfQpzdHJpbmcgZ2V0U3RyaW5nKGNoYXIgeCkgewogICAgc3RyaW5nIHMoMSwgeCk7IAogICAgcmV0dXJuIHM7ICAgIAp9IAoKdm9pZCBvcHRpbWl6ZUlPKCl7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsgCiAgICBjaW4udGllKE5VTEwpOwogICAgY291dC50aWUoTlVMTCk7Cn0Kdm9pZCByZWN1cnNpb24obGwgbixsbCBoLGxsIGlkeCxsbCBhW10sbGwgYltdLGxsICZhbnMsbGwgeCxsbCB5LGxsIHMxW10sbGwgczJbXSl7CiAgICBpZih4Pj1oICYmIHk+PWgpewogICAgICAgIGFucys9cG93KDMsbi1pZHgpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIGlmKGlkeD09bikgcmV0dXJuOwogICAgaWYoeCtzMVtpZHhdPGggfHwgeStzMltpZHhdPGgpIHJldHVybiA7CiAgICAKICAgIHJlY3Vyc2lvbihuLGgsaWR4KzEsYSxiLGFucyx4K2FbaWR4XSx5LHMxLHMyKTsKICAgIHJlY3Vyc2lvbihuLGgsaWR4KzEsYSxiLGFucyx4LHkrYltpZHhdLHMxLHMyKTsKICAgIHJlY3Vyc2lvbihuLGgsaWR4KzEsYSxiLGFucyx4K2FbaWR4XSx5K2JbaWR4XSxzMSxzMik7Cn0KaW50IG1haW4oKXsKICAgIG9wdGltaXplSU8oKTsKICAgIGludCBsdT0xOwogICAgdGN7IAogICAgICAgIGxsIGFucz0wOwogICAgICAgIGxsIG4saDsKICAgICAgICBjaW4+Pm4+Pmg7CiAgICAgICAgbGwgYVtuXSxiW25dOwogICAgICAgIHJlcChpLDAsbikgY2luPj5hW2ldOwogICAgICAgIHJlcChpLDAsbikgY2luPj5iW2ldOwogICAgICAgIGxsIHMxW25dLHMyW25dOwogICAgICAgIHMxW24tMV09YVtuLTFdOwogICAgICAgIHMyW24tMV09YltuLTFdOwogICAgICAgIHJyZXAoaSxuLTIsMCl7CiAgICAgICAgICAgIHMxW2ldPWFbaV0rczFbaSsxXTsKICAgICAgICAgICAgczJbaV09YltpXStzMltpKzFdOwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZWN1cnNpb24obixoLDAsYSxiLGFucywwLDAsczEsczIpOwogICAgICAgIGNvdXQ8PCJDYXNlICMiPDxsdSsrPDwiOiAiPDxhbnM8PGVuZGw7CiAgICB9CiAgICByZXR1cm4gMDsKfQ==