//MJRT #include #include #include #include ////////////////////// #include #include #include #include #include #include #include /////////////////////// #include #include #include #include #include #include #include /////////////////////// //#include //pd_bs库,hdu&&poj不支持 using namespace std; #define lowbit(x) ((x)&(-x)) static int INDEX = 0,BUGs = 0; #define BUG() cout << "There is BUG No." << BUGs++ <>1; const int N = 5 + 1000000; bool vis[N]; char s[N]; int l; bool rn(int y) { if((y%4==0&& y%100!= 0) || y%400==0) return 1; return 0; } bool pd1() { for(int i = 7 ; i < 11 ; i++) { if(s[6] != s[i]) return 0; } return 1; } bool pd2() { int f1 ,f2 ,f3; f1 = 1; for(int i = 6 ; i < 10 ; i++) if(!(s[i] > s[i+1] && abs(s[i]-s[i+1])==1)) f1=0; f2 = 1; for(int i = 6 ; i < 10 ; i++) if(!(s[i] < s[i+1] && abs(s[i]-s[i+1])==1)) f2=0; return f1||f2; } bool pd3() { int y=0,m=0,d=0; y = (s[3]-'0')*1000+(s[4]-'0')*100+(s[5]-'0')*10+(s[6]-'0'); m = (s[7]-'0')*10+(s[8]-'0'); d = (s[9]-'0')*10+(s[10]-'0'); if(1980 > y || y > 2016 ) return 0; if(m == 2 && rn(y) && d == 29) return 1; if(m == 2 && (1 <= d && d <= 28)) return 1; if((m ==1 ||m ==3 ||m ==5 ||m ==7 ||m ==8 ||m ==10||m ==12) && (1 <= d && d <= 31)) return 1; if((m ==4 ||m ==6 || m ==9 ||m ==11) && (1 <= d && d <= 30)) return 1; return 0; } int main() { //ios::sync_with_stdio(false); #ifndef ONLINE_JUDGE //freopen("in.txt", "r", stdin); //freopen("out.txt", "w", stdout); #endif int Case,n,a,b; scanf("%d",&Case); while(Case--) { LL ans = 0; scanf("%d%d%d",&n,&a,&b); for(int i = 0 ; i < n ; i++) { scanf("%s",s); l = strlen(s); if(pd1() || pd2() ||pd3()) ans += a; else ans +=b ; //printf("1:%d,2:%d,3:%d\n",pd1(),pd2(),pd3()); } printf("%I64d\n",ans); } return 0; }