using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static string InputPattern = "InputX";
static List<string> GetInputList()
{
var WillReturn = new List<string>();
if (InputPattern == "Input1") {
WillReturn.Add("4");
WillReturn.Add("3 1 4");
WillReturn.Add("1 5 9");
WillReturn.Add("2 6 5");
WillReturn.Add("3 5 8");
WillReturn.Add("11");
WillReturn.Add("0");
WillReturn.Add("1");
WillReturn.Add("2");
WillReturn.Add("3");
WillReturn.Add("4");
WillReturn.Add("5");
WillReturn.Add("6");
WillReturn.Add("7");
WillReturn.Add("8");
WillReturn.Add("9");
WillReturn.Add("10");
//6
//0
//0
//0
//5
//6
//0
//0
//0
//0
//0
}
else if (InputPattern == "Input2") {
WillReturn.Add("3");
WillReturn.Add("500 500 500");
WillReturn.Add("500 500 500");
WillReturn.Add("500 500 500");
WillReturn.Add("1");
WillReturn.Add("1000000000");
//999998500
}
else if (InputPattern == "Input3") {
WillReturn.Add("20");
WillReturn.Add("124 370 105");
WillReturn.Add("280 200 420");
WillReturn.Add("425 204 302");
WillReturn.Add("435 141 334");
WillReturn.Add("212 287 231");
WillReturn.Add("262 410 481");
WillReturn.Add("227 388 466");
WillReturn.Add("222 314 366");
WillReturn.Add("307 205 401");
WillReturn.Add("226 460 452");
WillReturn.Add("336 291 119");
WillReturn.Add("302 104 432");
WillReturn.Add("478 348 292");
WillReturn.Add("246 337 403");
WillReturn.Add("102 404 371");
WillReturn.Add("368 399 417");
WillReturn.Add("291 416 351");
WillReturn.Add("236 263 231");
WillReturn.Add("170 415 482");
WillReturn.Add("101 339 184");
WillReturn.Add("20");
WillReturn.Add("1162");
WillReturn.Add("1394");
WillReturn.Add("1695");
WillReturn.Add("2501");
WillReturn.Add("3008");
WillReturn.Add("3298");
WillReturn.Add("4053");
WillReturn.Add("4093");
WillReturn.Add("4330");
WillReturn.Add("5199");
WillReturn.Add("5302");
WillReturn.Add("5869");
WillReturn.Add("5875");
WillReturn.Add("6332");
WillReturn.Add("6567");
WillReturn.Add("7483");
WillReturn.Add("7562");
WillReturn.Add("7725");
WillReturn.Add("9723");
WillReturn.Add("9845");
//339
//339
//339
//339
//339
//339
//339
//339
//339
//339
//339
//339
//339
//389
//339
//643
//722
//885
//2883
//3005
}
else {
string wkStr;
while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
}
return WillReturn;
}
static long[] GetSplitArr(string pStr)
{
return (pStr == "" ? new string[0] : pStr.Split(' ')).Select(pX => long.Parse(pX)).ToArray();
}
struct PresentInfoDef
{
internal long P;
internal long A;
internal long B;
}
static PresentInfoDef[] mPresentInfoArr;
static long UB;
static Fenwick_Tree mFenwick_Tree;
static void Main()
{
List<string> InputList = GetInputList();
long N = long.Parse(InputList[0]);
long[] wkArr = { };
Action<string> SplitAct = (pStr) => wkArr = GetSplitArr(pStr);
var PresentInfoList = new List<PresentInfoDef>();
foreach (string EachStr in InputList.Skip(1).Take((int)N)) {
SplitAct(EachStr);
PresentInfoDef WillAdd;
WillAdd.P = wkArr[0];
WillAdd.A = wkArr[1];
WillAdd.B = wkArr[2];
PresentInfoList.Add(WillAdd);
}
mPresentInfoArr = PresentInfoList.ToArray();
UB = mPresentInfoArr.GetUpperBound(0);
mFenwick_Tree = new Fenwick_Tree(UB);
for (long I = 0; I <= UB; I++) {
mFenwick_Tree[I] = -1 * mPresentInfoArr[I].B;
}
var sb = new System.Text.StringBuilder();
foreach (string EachStr in InputList.Skip(1 + (int)N + 1)) {
long X = long.Parse(EachStr);
long Result = dfs(0, X);
sb.Append(Result);
sb.AppendLine();
}
Console.Write(sb.ToString());
}
// メモ化再帰
static Dictionary<long, long> mMemoDict = new Dictionary<long, long>();
static long dfs(long pCurrInd, long pCurrTension)
{
pCurrTension = Math.Max(0, pCurrTension);
long Hash = pCurrInd * 1000000000000 + pCurrTension;
if (mMemoDict.ContainsKey(Hash)) {
return mMemoDict[Hash];
}
if (pCurrInd > UB) {
return mMemoDict[Hash] = pCurrTension;
}
// 1001以上なら、1001未満になるまで飛ばす
if (pCurrTension >= 1001) {
long L = pCurrInd;
long R = UB;
long AllRangeSum = mFenwick_Tree.GetSum(pCurrInd, UB);
if (pCurrTension + AllRangeSum >= 1001) {
return mMemoDict[Hash] = pCurrTension + AllRangeSum;
}
while (L + 1 < R) {
long Mid = (L + R) / 2;
long RangeSum = mFenwick_Tree.GetSum(pCurrInd, Mid);
if (pCurrTension + RangeSum >= 1001) {
L = Mid;
}
else {
R = Mid;
}
}
return mMemoDict[Hash] = dfs(R + 1, pCurrTension + mFenwick_Tree.GetSum(pCurrInd, R));
}
PresentInfoDef CurrPresent = mPresentInfoArr[pCurrInd];
if (pCurrTension <= CurrPresent.P) {
pCurrTension += CurrPresent.A;
}
else {
pCurrTension -= CurrPresent.B;
}
return mMemoDict[Hash] = dfs(pCurrInd + 1, pCurrTension);
}
}
// フェニック木
#region Fenwick_Tree
internal class Fenwick_Tree
{
private long[] mBitArr;
private long mExternalArrUB;
// ノードのIndexの列挙を返す
internal IEnumerable<long> GetNodeIndEnum()
{
for (long I = 0; I <= mExternalArrUB; I++) {
yield return I;
}
}
// 木のノードのUBを返す
internal long GetUB()
{
return mExternalArrUB;
}
// コンストラクタ(外部配列のUBのみ指定)
internal Fenwick_Tree(long pExternalArrUB)
{
mExternalArrUB = pExternalArrUB;
// フェニック木の外部配列は0オリジンで、
// フェニック木の内部配列は1オリジンなため、2を足す
mBitArr = new long[pExternalArrUB + 2];
}
// コンストラクタ(初期化用の配列指定)
internal Fenwick_Tree(long[] pArr)
: this(pArr.GetUpperBound(0))
{
for (long I = 0; I <= pArr.GetUpperBound(0); I++) {
this.Add(I, pArr[I]);
}
}
// コンストラクタ(初期化用のList指定)
internal Fenwick_Tree(List<long> pList)
: this(pList.Count - 1)
{
for (int I = 0; I <= pList.Count - 1; I++) {
this.Add(I, pList[I]);
}
}
// インデクサ
internal long this[long pInd]
{
get { return GetSum(pInd, pInd); }
set { Add(pInd, value - GetSum(pInd, pInd)); }
}
// [pSta,pEnd] のSumを返す
internal long GetSum(long pSta, long pEnd)
{
return GetSum(pEnd) - GetSum(pSta - 1);
}
// [0,pEnd] のSumを返す
internal long GetSum(long pEnd)
{
pEnd++; // 1オリジンに変更
long Sum = 0;
while (pEnd >= 1) {
Sum += mBitArr[pEnd];
pEnd -= pEnd & -pEnd;
}
return Sum;
}
// [I] に Xを加算
internal void Add(long pI, long pX)
{
pI++; // 1オリジンに変更
while (pI <= mBitArr.GetUpperBound(0)) {
mBitArr[pI] += pX;
pI += pI & -pI;
}
}
}
#endregion