#include <iostream>
#include <cstdio>
#include <fstream>
#include <vector>
#include <cmath>
#define ffor(_a,_f,_t) for(int _a=(_f),__t=(_t);_a<__t;_a++)
#define all(_v) (_v).begin() , (_v).end()
#define sz size()
#define pb push_back
#define SET(__set, val) memset(__set, val, sizeof(__set))
#define FOR(__i, __n) ffor (__i, 0, __n)

using namespace std;

const int MAXN = 100000;
const double PI2 = acos(0.0);

int xx1, yy1, xx2, yy2, alpha;

struct myt{
  double pos;
  bool start;
  
  myt(){
  }
  
  myt(double _pos, bool _start){
    pos = _pos;
    start = _start;
  }
  
  friend bool operator <(const myt &a, const myt &b){
    if (fabs(a.pos - b.pos) > 1e-9)
      return a.pos < b.pos;
      
    return a.start && !b.start;
  }
};

myt points[MAXN << 1];

/*
  Za datu tacku (a, b), zelimo da za pravu
  sa nagibom alpha koja sadrzi tacku (a, b)
  nadjemo mesto presecanja na x-osi.
*/
double calc(double a, double b){
  if (alpha == 90)
    return a;
  
  // 90 : PI2 = alpha : rad - pretvaramo u radijane
  double rad = PI2 * alpha / 90.0;
  
  // b / c = tg alpha; b i c su stranice
  // pravouglog trougla kojeg posmatramo,
  // tj. onog koji ima jedan ugao alpha,
  // ugao naspram stranice a. Resenje ce
  // biti a - c
  double c = b / tan(rad);
  return a - c;
}

int main(){
  char filein[16] = "poljane.in";
  char fileout[16] = "poljane.sol";
  FILE *fin;
  FILE *fout;
  
    
  fin = fopen(filein, "r");
  fout = fopen(fileout, "w");
  
  int n;
  fscanf(fin, "%d %d", &n, &alpha);
  FOR (i, n){
    fscanf(fin, "%d %d %d %d", &xx1, &yy2, &xx2, &yy1);
    points[i << 1] = myt(calc(xx1, yy1), true);
    points[(i << 1) + 1] = myt(calc(xx2, yy2), false);
  }
  sort(points, points + (n << 1));
  
  int ret = 0, cnt = 0;
  FOR (i, n << 1){
    if (points[i].start)
      cnt++;
    else
      cnt--;
      
    ret >?= cnt;
  }
  
  fprintf(fout, "%d\n", ret);

  fclose(fin);
  fclose(fout);
  
  return 0;
}
