#include <bits/stdc++.h>
using namespace std;
long long N, M, MOD;
pair<long long, long long> Q(long long n, long long imax, long long vmax) {
  if (vmax == 0) return make_pair(0, 0);
  if (imax == 0) return make_pair(0, 0);
  if (imax == 1) return make_pair(1, 1);
  if (n == 1) return make_pair(1, 1);
  if (n == 0) return make_pair(0, 0);
  long long mid = (n + 1) / 2;
  if (imax > mid) {
    pair<long long, long long> para;
    para = Q(n - mid, imax - mid, vmax / 2);
    return make_pair(((min(((vmax + 1) / 2), mid) % MOD) *
                          (min(((vmax + 1) / 2), mid) % MOD) % MOD +
                      2 * para.first % MOD) %
                         MOD,
                     (min(((vmax + 1) / 2), mid) % MOD) + para.second);
  } else {
    pair<long long, long long> para;
    para = Q(mid, imax, (vmax + 1) / 2);
    return make_pair((2 * para.first - para.second) % MOD, para.second % MOD);
  }
}
long long querry(long long l, long long r, long long u, long long v) {
  return ((Q(N, r, v).first - Q(N, r, u - 1).first - Q(N, l - 1, v).first +
           Q(N, l - 1, u - 1).first) %
              MOD +
          MOD) %
         MOD;
}
int main() {
  long long l, r, u, v;
  cin >> N >> M >> MOD;
  for (int i = 1; i <= M; ++i) {
    cin >> l >> r >> u >> v;
    cout << querry(l, r, u, v) << '\n';
  }
  return 0;
}
