#include #include #include using ull = unsigned long long; using std::cout,std::iostream,std::bitset; template class ReadNumber{ char c; T w,n; public: ReadNumber& operator>>(T &num)noexcept{ c=(char)0,w=1,n=0; while(!isdigit(c)){ if constexpr(!std::is_same_v){ if(c=='-')w=-1; } c = getchar(); } while(isdigit(c)){ n = n*10 + (c-'0'); c = getchar(); } num = w*n; return *this; } }; ull n,m,c,k,num,input,p,q,ans {1}; bitset<64+5> bt; ReadNumber readull; #define cin readull int main(){ cin>>n>>m>>c>>k; if(n==0 && m==0 && k==64){ //特判 cout<<"18446744073709551616\n"; return 0; } for(ull i=0;i>input; num |= input; //所有编号占用的'1'的位置,把他并在一起 } for(ull i=0;i>p>>q; if(!((num>>p)&1) && !bt[p]){ //已有的n个编号里面没有出现过的规则,并且还未标记,bt用来去重 k--; bt[p]=true; } } for(int i=0;i