入力される値
2
2 5
3 4

期待する出力
hello = 2 , world = 5 
hello = 3 , world = 4

の場合のコードは、

#include <stdio.h>
int main(void){
  int i, n;
  char buf[1000];
  char token1[100], token2[100];

  fgets(buf, sizeof(buf), stdin);
  sscanf(buf, "%d\n", &n);
  for (i=0; i<n; i++) {
    fgets(buf, sizeof(buf), stdin);
    sscanf(buf, "%s %s\n", token1, token2);
    printf("hello = %s , world = %s\n" ,token1 ,token2);
  }
  return 0;
}

このように、決まったフォーマットのデータを読み込む際はsscanfとfgetsを組み合わせると、上手くいきますが、
入力されるフォーマットが以下のように不規則の場合、sscanfとfgetsを組み合わせてファイルを読み込むことはできるのでしょうか?(全てint型)

入力フォーマット   
M N  
c_1  
c_2  
...  
c_M
a_{1,1} a_{1,2}  ... a_{1,M}  
a_{2,1} a_{2,2}  ... a_{2,M}  
...  
a_{N,1} a_{N,2}  ... a_{N,M}

入力例1
3 3
250
500
1000
100 200 300
30 250 0
1 1 1000

入力例2
5 1
123
456
789
111
220
10 10 10 10 10