Lumberjaxe Code Golf Tom the lumberjack is going to do his daily routine: chop trees. After all, it's his job to do so. His boss has ordered him to chop trees in a straight line marked with a special tape to identify them, so he knows which trees he is going to have to chop. However, Tom quickly realizes he has a problem. His axe will only chop so much wood before breaking, and he forgot to bring a spare with him. Plus, the trees are different sizes. A small tree, marked with an i, will take 2 swings of the axe to chop, and a large tree, marked with an | will take 4 swings. Can Tom chop all of the assigned trees?
The Objective
Given two inputs, a string that determines the sequence of small and large trees and an integer that determines the durability of the axe, create a program that determines not only if Tom's axe will break or not, but also determine how many of each tree type he chopped down. It's code-golf, so the shortest code in bytes wins!
Example
Input 1 example:i||iii| This input string determines the sequence of trees.
Input 2 example:50 This input integer determines the durability of the axe.
The outputs for this particular example will be a boolean and a string as follows(True means Tom's axe broke):
False
4 small, 3 big
JavaScript (Node.js), 52 bytes
Takes input as (b)(n), where b is a Buffer (using the characters described in the challenge) and n is the durability of the axe.
Returns a Boolean value and 2 integers as [ broken, [ small, big ]].
b=&gt;n=&gt;[b.some(c=&gt;(n-=6&amp;c+1)&lt;0||!++a[c%3],a=[0,0]),a]

Try it online!
How?
Given an ASCII code c, we use 6 &amp; (c + 1) to get the number of swings needed to chop the tree, and c % 3 to get an index into the tree-counting array a[] (0 for small, 1 for big).
 char. | c = ASCII code | 6 &amp; (c + 1) | c % 3
-------+----------------+-------------+-------
  'i'  |       105      |      2      |   0
  '|'  |       124      |      4      |   1