Ответ LINQ (который читает все тройки):
var qry = from outer in allOffset
from inner in outer.Value
select new {OuterKey = outer.Key,InnerKey = inner.Key,inner.Value};
или (чтобы получить строку напрямую):
var qry = from outer in allOffset
from inner in outer.Value
select outer.Key + "->>" + inner.Key + ", " + inner.Value;
foreach(string s in qry) { // show them
Console.WriteLine(s);
}