#include <bits/stdc++.h>
using namespace std;
const int mod = 998244353;
int n, m;
int f[2][25][25][25][25][2][2];
int x[6], y[6];
int tpx[1 << 6], tqx[1 << 6], tpy[1 << 6], tqy[1 << 6];
inline void update(int &x, int y) { x = x + y >= mod ? x + y - mod : x + y; }
inline bool check(int now, int px, int qx, int py, int qy) {
  for (int a = 0; a < 2; a++)
    for (int b = 0; b < 2; b++)
      if (f[now][px][qx][py][qy]) return true;
  return false;
}
int main() {
  scanf("%d %d", &n, &m);
  for (int i = 1; i <= n; i++) scanf("%d %d", &x[i], &y[i]);
  for (int s = 0; s < (1 << n); s++)
    for (int j = 1; j <= n; j++)
      if (s >> j - 1 & 1) {
        if (x[j] > 0)
          tpx[s] += x[j];
        else
          tqx[s] -= x[j];
        if (y[j] > 0)
          tpy[s] += y[j];
        else
          tqy[s] -= y[j];
      }
  int now = 0, lim = (1 << n) - 1;
  f[now][0][0][0][0][1][1] = 1;
  for (int i = 31; i >= 1; i--) {
    now ^= 1;
    memset(f[now], 0, sizeof(f[now]));
    int v = m >> i - 1 & 1;
    for (int px = 0; px <= tpx[lim]; px++)
      for (int qx = 0; qx <= tqx[lim]; qx++)
        for (int py = 0; py <= tpy[lim]; py++)
          for (int qy = 0; qy <= tqy[lim]; qy++) {
            if (!check(now ^ 1, px, qx, py, qy)) continue;
            for (int s = 0; s <= lim; s++)
              for (int a = 0; a < 2; a++)
                for (int b = 0; b < 2; b++) {
                  int res = f[now ^ 1][px][qx][py][qy][a][b], na, nb;
                  if (!res) continue;
                  int npx = px * 2 - tpx[s], nqx = qx * 2 - tqx[s],
                      npy = py * 2 - tpy[s], nqy = qy * 2 - tqy[s];
                  if (npx > tpx[lim] || nqx > tqx[lim] || npy > tpy[lim] ||
                      nqy > tqy[lim])
                    continue;
                  if (npx >= 0 && nqx >= 0 && npy >= 0 && nqy >= 0) {
                    na = a & (v == 0), nb = b & (v == 0);
                    update(f[now][npx][nqx][npy][nqy][na][nb], res);
                  }
                  bool f1 = a & (v == 0), f2 = b & (v == 0);
                  if (!f1 && npx + 1 >= 0 && nqx + 1 >= 0 && npy >= 0 &&
                      nqy >= 0) {
                    na = a & (v == 1), nb = b & (v == 0);
                    update(f[now][npx + 1][nqx + 1][npy][nqy][na][nb], res);
                  }
                  if (!f2 && npx >= 0 && nqx >= 0 && npy + 1 >= 0 &&
                      nqy + 1 >= 0) {
                    na = a & (v == 0), nb = b & (v == 1);
                    update(f[now][npx][nqx][npy + 1][nqy + 1][na][nb], res);
                  }
                  if (!f1 && !f2 && npx + 1 >= 0 && nqx + 1 >= 0 &&
                      npy + 1 >= 0 && nqy + 1 >= 0) {
                    na = a & (v == 1), nb = b & (v == 1);
                    update(f[now][npx + 1][nqx + 1][npy + 1][nqy + 1][na][nb],
                           res);
                  }
                }
          }
  }
  int ans = mod - 1;
  for (int a = 0; a < 2; a++)
    for (int b = 0; b < 2; b++) update(ans, f[now][0][0][0][0][a][b]);
  printf("%d\n", ans);
  return 0;
}
