#include <bits/stdc++.h>
using namespace std;
const int mod = 998244353;
int x[5], y[5], px[32], nx[32], py[32], ny[32];
int dp[32][20][20][20][20][2][2];
int n, m;
void add(int& x, const int& y) {
  x += y;
  if (x >= mod) x -= mod;
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 0; i < n; i++) scanf("%d%d", &x[i], &y[i]);
  for (int mas = 0; mas < (1 << n); mas++)
    for (int i = 0; i < n; i++)
      if ((mas >> i) & 1) {
        (x[i] > 0 ? px : nx)[mas] += abs(x[i]);
        (y[i] > 0 ? py : ny)[mas] += abs(y[i]);
      }
  dp[0][0][0][0][0][0][0] = 1;
  for (int i = 0; i < (30); i += 1)
    for (int cpx = 0; cpx < (20); cpx += 1)
      for (int cnx = 0; cnx < (20); cnx += 1)
        for (int cpy = 0; cpy < (20); cpy += 1)
          for (int cny = 0; cny < (20); cny += 1)
            for (int bx = 0; bx < (2); bx += 1)
              for (int by = 0; by < (2); by += 1)
                for (int mask = 0; mask < (1 << n); mask += 1)
                  if (dp[i][cpx][cnx][cpy][cny][bx][by]) {
                    if (0)
                      cout << i << " " << cpx << " " << cny << " " << cpy << " "
                           << cny << " " << bx << " " << by << " "
                           << dp[i][cpx][cnx][cpy][cny][bx][by] << endl;
                    int npx = cpx + px[mask], nnx = cnx + nx[mask],
                        npy = cpy + py[mask], nny = cny + ny[mask];
                    if ((npx ^ nnx) & 1) continue;
                    if ((npy ^ nny) & 1) continue;
                    int cx = npx & 1, mx = (m >> i) & 1, cy = npy & 1,
                        my = (m >> i) & 1;
                    add(dp[i + 1][npx >> 1][nnx >> 1][npy >> 1][nny >> 1]
                          [cx != mx ? (cx > mx) : bx]
                          [cy != my ? (cy > my) : by],
                        dp[i][cpx][cnx][cpy][cny][bx][by]);
                  }
  cout << (dp[30][0][0][0][0][0][0] + mod - 1) % mod;
}
