#include using namespace std; #include using namespace atcoder; using mint=atcoder::modint998244353; #define int long long #define rep(i,n) for(int i=0;i<(n);i++) #define rng(i,l,r) for(int i=(l);i<(r);i++) #define rrep(i,n) for(int i=(n)-1;i>=0;i--) #define rrng(i,l,r) for(int i=(r)-1;i>=(l);i--) #define all(x) (x).begin(),(x).end() #define pb push_back #define fi first #define se second struct fast_io{fast_io(){cin.tie(nullptr)->sync_with_stdio(false);}}_; template bool chmax(T &a,T b){return (a bool chmin(T &a,T b){return (a>b)?a=b,1:0;} templateusing pqmin=priority_queue,greater>; namespace nouka28{ template vector ZetaTransform(int n,vector f){ for(int i=0;i>i&1)f[j]+=f[j^(1< vector MobiusTransform(int n,vector f){ for(int i=0;i>i&1)f[j]-=f[j^(1< vector convolution_or(vector f,vector g){ int x=1,n=0;while(x h;for(int i=0;i vector convolution_and(vector f,vector g){ int x=1,n=0;while(x h=convolution_or(f,g); reverse(h.begin(),h.end()); return h; } } using namespace nouka28; signed main(){ int N,M,L;cin>>N>>M>>L; vector> C(M,vector(L)); rep(i,N){ int a,b;cin>>a>>b; a--; b-=M+1; C[a][b]++; } vector> F(M,vector(L)); rep(i,M)rep(j,L){ F[i][j]=mint(2).pow(C[i][j])-1; } vector ret(1< f(1<>j&1)x*=F[i][j]; f[S]=x; } // cout<