#include <bits/stdc++.h>
using namespace std;
constexpr int const mod = 998244353;
constexpr int add(int a, int b) { return a + b < mod ? a + b : a + b - mod; }
constexpr int sub(int a, int b) { return a < b ? mod + a - b : a - b; }
inline void ADD(int& a, int b) { a = add(a, b); }
int dx[2][32], dy[2][32], dp0[16][16][16][16][2][2], dp1[16][16][16][16][2][2];
int main() {
  int n, m, x[5], y[5];
  cin >> n >> m;
  int N = (1 << n) - 1;
  for (int i = 0; i != n; ++i) cin >> x[i] >> y[i];
  for (int s = 1; s <= N; ++s)
    for (int i = 0; i != n; ++i)
      if (s >> i & 1) {
        dx[x[i] > 0][s] += abs(x[i]);
        dy[y[i] > 0][s] += abs(y[i]);
      }
  int X0 = dx[0][N], X1 = dx[1][N], Y0 = dy[0][N], Y1 = dy[1][N];
  if (!X0 || !X1 || !Y0 || !Y1) return cout << "0" << endl, 0;
  dp1[0][0][0][0][0][0] = 1;
  for (int i = 0; i != 31; ++i) {
    memcpy(dp0, dp1, sizeof(dp0));
    memset(dp1, 0, sizeof(dp0));
    for (int x0 = 0; x0 <= X0; ++x0)
      for (int x1 = 0; x1 <= X1; ++x1)
        for (int y0 = 0; y0 <= Y0; ++y0)
          for (int y1 = 0; y1 <= Y1; ++y1) {
            for (int ox = 0; ox != 2; ++ox)
              for (int oy = 0; oy != 2; ++oy) {
                for (int s = 0; s <= N; ++s) {
                  int xx0 = dx[0][s] + x0, xx1 = dx[1][s] + x1,
                      yy0 = dy[0][s] + y0, yy1 = dy[1][s] + y1;
                  if (((xx0 ^ xx1) | (yy0 ^ yy1)) & 1) continue;
                  ADD(dp1[xx0 >> 1][xx1 >> 1][yy0 >> 1][yy1 >> 1]
                         [(xx0 << 1 & 2 ^ ox) > (m >> i << 1 & 2)]
                         [(yy0 << 1 & 2 ^ oy) > (m >> i << 1 & 2)],
                      dp0[x0][x1][y0][y1][ox][oy]);
                }
              }
          }
  }
  cout << sub(dp1[0][0][0][0][0][0], 1) << endl;
}
