#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
#include <set>
#include <string>
using namespace std;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
#define REP(i, k, n) for (int i = (int)(k); i <(int)(n); i++)
#define rrep(i, n) for (int i = (int)(n)-1; i >= 0; i--)
#define rREP(i,k,n) for (int i = (int)(n)-1; i >= k; i--)
#define mod 1000000007
long long dp[110][110][110] = {};
int main()
{
int n,m;
cin >> n >> m;
rep(i,n) {
int a,b,c;
long long w;
cin >> a >> b >> c >> w;
dp[a][b][c] = max(dp[a][b][c],w);
}
dp[0][1][1] = max({dp[0][1][1],dp[0][0][1],dp[0][1][0],dp[0][0][0]});
dp[1][0][1] = max({dp[1][0][1],dp[0][0][1],dp[1][0][0],dp[0][0][0]});
dp[1][1][0] = max({dp[1][1][0],dp[0][1][0],dp[1][0][0],dp[0][0][0]});
REP(a,1,101){
REP(b,1,101){
REP(c,1,101){
dp[a][b][c] = max({dp[a][b][c],dp[a-1][b][c],dp[a][b-1][c],dp[a][b][c-1]});
}
}
}
rep(i,m){
int x,y,z;
cin >> x >> y >> z;
cout << dp[x][y][z] << endl;
}
return 0;
}