#include <iostream> #include <cstring> #include <cstdio> using namespace std; int t[55]; int dp[55][222]; //dp[i][j]记录在第i个车站需要等待时间 int l[55][222], r[55][222]; //l[i][j]第i个车站在j时刻是否有从左边行驶的车辆 r[i][j]右方向同l[i][j] int num = 0; int min(int a,int b){ if(a<b) return a; return b; } int main() { int n,T,m,cur; while (scanf("%d",&n)!=EOF ) { memset(l, 0, sizeof(l)); memset(r, 0, sizeof(r)); memset(dp, 0x3f, sizeof(dp)); cin>>T; for(int i=1;i<n;i++) cin>>t[i]; cin>>m; for(int i=1;i<=m;i++) { cin>>cur; for(int j=1;j<=n;j++) { l[j][cur] = 1, cur += t[j]; } } cin>>m; for(int i=1;i<=m;i++) { cin>>cur; for(int j=n;j>0;j--) { r[j][cur] = 1, cur += t[j - 1]; } } dp[n][T]=0; for(int j=T-1;j>=0;j--) for(int i=1;i<=n;i++) { dp[i][j]=dp[i][j+1]+1; if(l[i][j]) dp[i][j] = min(dp[i][j],dp[i+1][j+t[i]]); if(r[i][j]) dp[i][j] = min(dp[i][j],dp[i-1][j+t[i-1]]); } cout<< "Case Number "<<++num<<": "; if(dp[1][0]>T) cout<<"impossible"<<endl; else cout<<dp[1][0]<<endl; } return 0; }